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('):
   ...

为什么要使用字符类(
[]
)?在我看来,如果删除这些字符类,它应该可以工作。为什么要使用字符类(
[]
)?在我看来,如果删除这些字符类,它应该可以工作。