使用正则表达式查找模式

时间:2016-03-10 16:29:23

标签: python regex

如果我有一个包含这样句子的文件:

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())

5 个答案:

答案 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)

请尝试:

(?:^|\s+)(\d{4}\b)(?!\s.*\w+)

DEMO