我正在尝试使用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手册,但我没有找到任何信息。
答案 0 :(得分:2)
你没有用正则表达式捕获整行,你只能匹配类型的行:
*7
像^\*(?:\d+\s+)+$
这样的东西应该有效,不需要多行,因为你正在将正则表达式应用到文件的每一行。
编辑: 更改为非捕获组,因为它不需要。
答案 1 :(得分:1)
假设您只是在一行的开头寻找*
+号码,您只需要这样做:
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
,则可以。 See the docs
答案 2 :(得分:0)
试试这个:
re.compile(r'^\*\d\s+\d+\s+')
答案 3 :(得分:0)
不知道python但似乎正则表达式应该是^[*][\d(\s)*]+$