Python 使用正则表达式查找模式

Python 使用正则表达式查找模式,python,regex,Python,Regex,如果我有一个由以下句子组成的文件: 1001 apple 1003 banana 1004 grapes 1005 1007 orange 现在我想检测并打印所有有数字但没有相应文本的句子(例如1005),如何设计正则表达式来查找这些句子?我发现它们的构造有点混乱 res=[] with open("fruits.txt","r") as f: for fruit in f: res.append(fruit.strip().split()) 它是这样的:re

如果我有一个由以下句子组成的文件:

1001 apple
1003 banana
1004 grapes
1005 
1007 orange
现在我想检测并打印所有有数字但没有相应文本的句子(例如1005),如何设计正则表达式来查找这些句子?我发现它们的构造有点混乱

res=[]
with open("fruits.txt","r") as f:
     for fruit in f:
          res.append(fruit.strip().split())

它是这样的:
re.sub(“10**/”)

一个正则表达式,它将检测一个数字,然后是一个空格,然后是一个下划线词,它是
([0-9])+[]\w+


一个很好的尝试这些东西的资源是一个正则表达式,它可以检测一个数字,然后是一个空格,然后是一个下划线词,它是
([0-9])+[]\w+


一个很好的资源是

这个资源的重新模式是re.sub(“[0-9][0-9][0-9][0-9]”)。如果只有四个数字,那么它将找到您的1005


希望这能有所帮助!

此重新模式将是
re.sub(“[0-9][0-9][0-9][0-9]”)
。这看起来只有四个数字,没有其他数字,因此它将找到您的1005


希望这有帮助!

您不需要正则表达式来实现这一点:

with open("fruits.txt", "r") as f:
    res = [int(line.strip()) for line in f if len(line.split()) == 1]

这不需要正则表达式:

with open("fruits.txt", "r") as f:
    res = [int(line.strip()) for line in f if len(line.split()) == 1]

这有两种方法:
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
)精确匹配四次。

$
在行尾匹配。

有两种方法可以实现这一点:
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
)精确匹配四次。
$
在行的末尾匹配。

请尝试:

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

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

如果您的输入只包含
数字单词
数字
,那么您不需要正则表达式,只需拆分行即可:如果有两个元素,那么您就得到了
数字单词
,如果您只有一个,那么您就得到了您想要的东西。您误解了
*
是什么意思吗在正则表达式中,它不是通配符。如果您的输入只包含
数字单词
数字
,那么您不需要正则表达式,只需拆分行即可:如果有两个元素,那么您就有
数字单词
,如果您只有一个,那么您就得到了您想要的或者。您误解了
*
在正则表达式中的作用,它不是通配符。我只想指出,额外的大括号在技术上是不必要的。一个简单的空格字符就足够了,尽管大括号确实有助于使意图更清楚。我只想指出,额外的大括号在技术上是不必要的。一个简单的空格字符就足够了,尽管大括号确实有助于使意图更清楚。