Python 使用正则表达式搜索时区分相似字符串的问题
我有两个字符串Python 使用正则表达式搜索时区分相似字符串的问题,python,regex,Python,Regex,我有两个字符串PG((0,0)、(0,1)、(1,1)、(1,0))和p(1,1) 我需要编写代码,在正则表达式的帮助下识别这些字符串 到目前为止,我有: if(re.search("^[P\(]",line) is not None): print "P found" 这标识了两个字符串,但应仅标识p(1,1) 这也标识了两个字符串,但应仅标识PG((0,0)、(0,1)、(1,1)、(1,0)) 我做错了什么?删除方括号,因为它们标记字符集。使用: if(re.search(r"^
PG((0,0)、(0,1)、(1,1)、(1,0))
和p(1,1)
我需要编写代码,在正则表达式的帮助下识别这些字符串 到目前为止,我有:
if(re.search("^[P\(]",line) is not None):
print "P found"
这标识了两个字符串,但应仅标识p(1,1)
这也标识了两个字符串,但应仅标识PG((0,0)、(0,1)、(1,1)、(1,0))
我做错了什么?删除方括号,因为它们标记字符集。使用:
if(re.search(r"^P\(",line) is not None):
上一版本匹配这两个表达式的原因是它将测试
p
或\(
),并且都包含一个左括号。删除方括号,因为它们标记字符集。使用:
if(re.search(r"^P\(",line) is not None):
上一个版本匹配这两个表达式的原因是它将测试
p
或\(
),并且都包含一个左括号。您的正则表达式正在使用字符类([]
中的内容)。这意味着“匹配这些字符中的任何一个”。因此,第一个匹配以“P”或“(”)开头的任何字符串,第二个匹配以“P”、“G”或“(”)开头的任何字符串。最简单的修复方法是删除字符类,例如:
请注意,我使用了一个“原始字符串”(以r
为前缀的字符串)。这会阻止python执行通常的字符转义。还请注意,如果您从使用re.search
更改为re.match
,则可以去掉行锚的开头:
re.match(r"PG\(\(",line)
因为re.match
只能从字符串的开头开始工作。它稍微简化了正则表达式,在处理正则表达式时,我觉得所有可能的简化都是值得的。注意,您甚至可以在这里放弃正则表达式,只需使用str.startswith
:
if line.startswith('PG(('):
...
elif line.startswith('P('):
...
您的正则表达式使用字符类(在
[]
中的内容)。这意味着“匹配这些字符中的任何一个”。因此,第一个匹配以“p”或“(”)开头的任何字符串,第二个匹配以“p”、“G”或“(”)开头的任何字符串。最简单的修复方法是删除字符类——例如:
请注意,我使用了一个“原始字符串”(以r
为前缀的字符串)。这会阻止python执行通常的字符转义。还请注意,如果您从使用re.search
更改为re.match
,则可以去掉行锚的开头:
re.match(r"PG\(\(",line)
因为re.match
只能从字符串的开头开始工作。它稍微简化了正则表达式,在处理正则表达式时,我觉得所有可能的简化都是值得的。注意,您甚至可以在这里放弃正则表达式,只需使用str.startswith
:
if line.startswith('PG(('):
...
elif line.startswith('P('):
...
为什么要使用字符类(
[]
)?在我看来,如果删除这些字符类,它应该可以工作。为什么要使用字符类([]
)?在我看来,如果删除这些字符类,它应该可以工作。