如何把以字母开头的行放在上面以数字开头的行

How to put row which started with letter to row above which started with digit

提问人:webmaher 提问时间:9/29/2023 最后编辑:Sam Masonwebmaher 更新时间:9/29/2023 访问量:65

问:

请帮我处理正则表达式。下面这段文字

07.00   Tom and Jerry
08.00   She is Just Like Others
**Series about young girl...**
09.00   Regional
09.30   Narava zdravi tržnica – Mic Mengeš, oddaja o zdravju
10.00   POP Hits
**Best music all over the world**
11.00   Alaska
12.00   Sport News
**All actual news from sports all over the world**
13.00   Morning news

必须是:

07.00   Tom and Jerry
08.00   She is Just Like Others**...Series about young girl...**
09.00   Regional
09.30   Narava zdravi tržnica – Mic Mengeš, oddaja o zdravju
10.00   POP Hits**...Best music all over the world**
11.00   Alaska
12.00   Sport News**...All actual news from sports all over the world**
13.00   Morning news

谢谢

正则表达式替换

评论


答:

0赞 Benjamin Barbé 9/29/2023 #1

使用 https://www.online-python.com/ 您可以将内容复制粘贴到下面的文本变量中:

import re

text = '''07.00   Tom and Jerry
08.00   She is Just Like Others
**Series about young girl...**
09.00   Regional
09.30   Narava zdravi tržnica – Mic Mengeš, oddaja o zdravju
10.00   POP Hits
**Best music all over the world**
11.00   Alaska
12.00   Sport News
**All actual news from sports all over the world**
13.00   Morning news
'''

pattern = r'(\d{2}\.\d{2}.*\S)\n(\*\*.*\*\*)'
replacement = r'\1**...\2**'

result = re.sub(pattern, replacement, text)
print(result)

结果:

    
07.00   Tom and Jerry
08.00   She is Just Like Others**...**Series about young girl...****
09.00   Regional
09.30   Narava zdravi tržnica – Mic Mengeš, oddaja o zdravju
10.00   POP Hits**...**Best music all over the world****
11.00   Alaska
12.00   Sport News**...**All actual news from sports all over the world****
13.00   Morning news

评论

0赞 webmaher 9/29/2023
这种模式和替换在我的记事本++中不起作用
0赞 Benjamin Barbé 9/29/2023
我建议将 Python 用于此解决方案。如果您正在寻找一次性解决方案,请考虑使用 online-python.com。您可以轻松地将内容复制并粘贴到那里获得结果。
0赞 Benjamin Barbé 9/29/2023
在记事本++上,由于其正则表达式引擎的限制,您可能需要不同的方法。也许这可以工作:替换为(\d{2}\.\d{2}.*\S)\r?\n(\*\*.*\*\*)\1**...\2**
0赞 The fourth bird 9/29/2023 #2

如果您使用的是 Notepad++,则可以匹配以时间模式开头的行。然后忘记到目前为止匹配的内容,并将换行符与要删除的换行符匹配。\K\R

在下一行匹配。**

在更换使用中**...

^\d{2}\.\d{2}\b.*\K\R\*\*

正则表达式演示

enter image description here

评论

0赞 webmaher 9/29/2023
不工作...可能是因为数字和文本之间总是 tab 07.00 \t 汤姆...
0赞 The fourth bird 9/29/2023
@webmaher在这种情况下,这无关紧要,请参阅 regex101.com/r/0M4w3h/1。你能用你在记事本++中的文本创建一个regex101链接,然后在评论中分享它吗?可以肯定的是,您是否选择了“正则表达式”?
0赞 webmaher 9/29/2023
这是我的真实文字:regex101.com/r/RduNBw/1
0赞 The fourth bird 9/29/2023
@webmaher但是,有了问题中的文本,这在我的 Notepad++ v8.5.4 中有效,您的版本是什么?您可以在没有锚的情况下尝试一下 你看到任何选择吗?当您搜索并用空字符串替换时,您会看到什么?\d{2}\.\d{2}.*\K\R\*\*\d.*
0赞 The fourth bird 9/29/2023
@webmaher 该文本根本不包含对吗?**