Python模式匹配
我正在尝试使用re模块解决正则表达式标识问题。 我想从文件中复制一些以*开头的行,确切的线型是: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”,但它是空的,无法识别模式。 你有什么建议吗 此外,你能给我解释一
*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
?