我有一个txt文件,每行包含一个句子,并且有几行包含附加在字母后面的数字。例如:
The boy3 was strolling on the beach while four seagulls appeared flying.
There were 3 women sunbathing as well.
All children were playing happily.
我想删除像第一行(即。有固定在单词上的数字),但没有像第二行那样正确书写的行。
有谁知道一点吗?
您可以使用一个简单的正则表达式模式。我们从[0-9]+
开始。此模式检测任意数字0-9的无限次数。意思是6或56或56790个作品。如果你想检测一个字符串后面有数字的句子,你可以使用这样的东西:([a-zA-Z][0-9]+)|([0-9]+[a-zA-Z])
这个正则表达式字符串匹配一个字符串,在数字前面或数字后面有一个字母。您可以使用以下命令搜索字符串:
import re
lines = [
'The boy3 was strolling on the beach while 4 seagulls appeared flying.',
'There were 3 women sunbathing as well.',
]
for line in lines:
res = re.search("([a-zA-Z][0-9]+)|([0-9]+[a-zA-Z])", line)
if res is None:
# remove line
但是,如果您的句子可以包含特殊字符等,则可以在允许的字母中添加更多字符。
假设您的输入文本存储在文件in.txt
中,您可以使用以下代码:
import re
with open("in.txt", "r") as f:
for line in f:
if not(re.search(r'(?!d)[w]d|d(?!d)[w]', line, flags=re.UNICODE)):
print(line, end="")
模式(?!d)[w]
查找不包括数字的单词字符(w
)。这个想法来自https://stackoverflow.com/a/12349464/2740367