如果我有一个包含这样句子的文件:
disp()
现在我想要检测并打印所有这样的句子,其中有一个数字但没有相应的文本(例如1005),我怎样才能设计正则表达式来找到这样的句子?我发现它们有点令人困惑。
1001 apple
1003 banana
1004 grapes
1005
1007 orange
会是这样的:res=[]
with open("fruits.txt","r") as f:
for fruit in f:
res.append(fruit.strip().split())
答案 0 :(得分:4)
嗯,你不需要正则表达式:
spark-shell
答案 1 :(得分:0)
一个正则表达式会检测一个数字,然后一个空格,然后一个下划线单词是([0-9])+[ ]\w+
。
尝试解决问题的好资源是http://regexr.com/
答案 2 :(得分:0)
此模式的重新模式为re.sub("[0-9][0-9][0-9][0-9]")
。这看起来只有四个数字而没有别的,所以它会找到你的1005。
希望这有帮助!
答案 3 :(得分:0)
有两种方法:search()
和findall()
。前者将找到匹配的第一个实例,后者将给出每个匹配的列表。
在任何情况下,您要使用的正则表达式都是"^\d{4}$"
。它是一个简单的正则表达式,它匹配占据整个字符串的4位数字,或者在多行模式中匹配一行。因此,要查找“仅编号”部分,您将使用以下代码:
# assume 'func' is set to either be re.search or re.findall, whichever you prefer
with open("fruits.txt", "r") as f:
solo = func("^\d{4}$", f.read(), re.MULTILINE)
# 'solo' now has either the first 'non-labeled' number,
# or a list of all such numbers in the file, depending on
# the function you used. search() will return None if there
# are no such numbers, and findall() will return an empty list.
# if you prefer brevity, re.MULTILINE is equivalent to re.M
正则表达式的补充说明:
^
匹配行的开头。
\d
是一个匹配任何数字的特殊序列
{4}
恰好与前一个元素(\d
)匹配四次
$
匹配在该行的末尾。
答案 4 :(得分:0)