Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python模式匹配_Python_Regex - Fatal编程技术网

Python模式匹配

Python模式匹配,python,regex,Python,Regex,我正在尝试使用re模块解决正则表达式标识问题。 我想从文件中复制一些以*开头的行,确切的线型是: *7 3 279 0 在这些字符中有制表符。 与行匹配的正则表达式是: regex=re.compile(r'^\*\d+.\n', re.MULTILINE) for line in f: if regexp.match(line) print >> a, line 我编写的脚本创建了文件“a”,但它是空的,无法识别模式。 你有什么建议吗 此外,你能给我解释一

我正在尝试使用re模块解决正则表达式标识问题。 我想从文件中复制一些以*开头的行,确切的线型是:

*7  3   279 0
在这些字符中有制表符。 与行匹配的正则表达式是:

regex=re.compile(r'^\*\d+.\n', re.MULTILINE)
for line in f:
    if regexp.match(line)
    print >> a, line
我编写的脚本创建了文件“a”,但它是空的,无法识别模式。 你有什么建议吗


此外,你能给我解释一下双引号和单引号模式的区别吗?我在几本python手册中进行了搜索,但没有找到任何信息。

您没有用正则表达式捕获该行的全部内容,您只能匹配以下类型的行:

*7

类似于
^\*(?:\d+\s+$
的东西应该可以工作,不需要多行,因为您将正则表达式应用于文件的每一行

编辑:
已更改为非捕获组,因为不需要该组。

如果不使用正则表达式捕获行的全部,则只能匹配以下类型的行:

*7

类似于
^\*(?:\d+\s+$
的东西应该可以工作,不需要多行,因为您将正则表达式应用于文件的每一行

编辑: 已更改为非捕获组,因为不需要该组。

请尝试此组:

 re.compile(r'^\*\d\s+\d+\s+')
试试这个:

 re.compile(r'^\*\d\s+\d+\s+')

我不懂python,但似乎regex sguld是这个
^[*][\d(\s)*]+$
我不懂python,但似乎regex sguld是这个
^[*][\d(\s)*]+$

假设您只在一行开头查找
*
+数字,您只需要执行以下操作:

regex=re.compile(r'\*\d+')
for line in f:
    if regexp.match(line)
    print >> a, line
如果您关心由空格分隔的数字数量:

regex=re.compile(r'\*(?:\d+\s+){3}\d+')
for line in f:
    if regexp.match(line)
    print >> a, line

如果使用
re.match
,则不需要
^
锚定。如果您使用
re.search
,您会这样做

假设您仅在行首查找编号,则只需执行以下操作:

regex=re.compile(r'\*\d+')
for line in f:
    if regexp.match(line)
    print >> a, line
如果您关心由空格分隔的数字数量:

regex=re.compile(r'\*(?:\d+\s+){3}\d+')
for line in f:
    if regexp.match(line)
    print >> a, line

如果使用
re.match
,则不需要
^
锚定。如果您使用
re.search
,您会这样做

在Python中,单引号字符串和双引号字符串没有区别。而且,如果逐行处理输入文件,似乎不需要多行匹配。使用常规匹配,并尝试搜索
$
而不是
\n
?在Python中,单引号字符串和双引号字符串之间没有区别。此外,如果逐行处理输入文件,似乎不需要多行匹配。使用常规匹配,并尝试搜索
$
而不是
\n