0

我正在尝试将坐标与 python 字符串正则表达式匹配,但我没有得到结果。我想看看输入是否是一个有效的坐标定义,但我没有使用下面的代码得到正确的匹配。有人可以告诉我有什么问题吗?

def coordinate(coord):
     a = re.compile("^(([0-9]+), ([0-9]+))$")
     b = a.match(coord)
     if b:
         return True
     return False

目前,即使我传入(3, 4)哪个是有效坐标,它也会返回 false。

4

3 回答 3

3

这有效:

from re import match
def coordinate(coord):   
    return bool(match("\s*\(\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*\)\s*$", coord))

它也非常强大,能够处理负数、分数和数字之间的可选空格。

下面是正则表达式模式的细分:

\s*         # Zero or more whitespace characters
\(          # An opening parenthesis
\s*         # Zero or more whitespace characters
-?          # An optional hyphen (for negative numbers)
\d+         # One or more digits
(?:\.\d+)?  # An optional period followed by one or more digits (for fractions)
\s*         # Zero or more whitespace characters
,           # A comma
\s*         # Zero or more whitespace characters
-?          # An optional hyphen (for negative numbers)
\d+         # One or more digits
(?:\.\d+)?  # An optional period followed by one or more digits (for fractions)
\s*         # Zero or more whitespace characters
\)          # A closing parenthesis
\s*         # Zero or more whitespace characters
$           # End of the string
于 2013-11-05T01:06:56.497 回答
0

您需要转义要匹配的括号。尝试使用以下内容:

^(\([0-9]+,\s[0-9]+\))$
于 2013-11-05T00:57:42.493 回答
0

在我看来,您没有正确地转义构成坐标语法的括号。在正则表达式中,括号是用于分组和捕获的特殊字符。您需要以这种方式逃避它们:

>>> a = re.compile("^\(([0-9]+), ([0-9]+)\)$")
>>> a.match("(3, 4)")
<_sre.SRE_Match object at 0x0000000001D91E00>
于 2013-11-05T00:59:30.453 回答