我正在尝试构建一个正则表达式来匹配 Python 中的字符串,例如“<String, Number>”。正则表达式应该拒绝任何在逗号之后和右括号之前没有单个整数的字符串(英语中叫方括号吗?)。然而,\d 和 [0-9] 正则表达式匹配内部逗号,所以例如我正在匹配
re.match('<.+?,\d+>', '<Year,4,4>')
但是,奇怪的是,不是为了
re.match('<.+?,\d+>', '<Year,4.4>')
我错了还是\d 不应该匹配逗号? 我真的不认为是这种情况,但我在阿根廷所以小数点实际上是这里的逗号而不是点,python 可以使用我的系统语言来解决这个问题并考虑逗号“数”?但是,据我所知,\d 不会是这种情况,因为它不应该包含 [0-9] 以外的任何内容,对吗?
有人可以帮我解决这个问题吗?我正在运行 Python 2.7.3
上下文:如果 < 和 > 字符之间只包含一个字符串,则将整个内容保存为符号,否则只保存逗号前的字符串并使用数字构建正则表达式
def compileRegex(self, r=''):
r += '//'
symbols = []
numeratedTracker = r'<(.+?),(\d+)>'
simpleTraker = r'<(.+?)>'
preSymbols = re.findall('<.+?>', r)
# Fill the symbol list and build the tracking regex
for s in preSymbols:
# Numerated symbol
numeratedMatch = re.match(numeratedTracker, s)
if numeratedMatch:
symbolAndNumber = s[1:-1].split(',')
symbols.append(symbolAndNumber[0])
subregex = '.{' + symbolAndNumber[1] + '}'
else:
symbols.append(s[1:-1])
subregex = '(.+?)'
re.sub(s, subregex, r)
return symbols, r
谢谢!
请您参考如下方法:
\d不匹配逗号。 .+?匹配第一个逗号,因为 .匹配任何字符,包括逗号。如果您不想在“字符串”部分使用逗号,请使用 r"<[^,]+,\d+>" 等正则表达式排除它们.
请注意,非贪婪限定符在这里对您没有帮助。使用 .+?意味着它将尝试匹配尽可能少的字符,但它仍然会匹配尽可能多的需要以使整个正则表达式匹配,如果可以的话。由于您要求它匹配 \d在逗号之后,它仍然会消耗第一个逗号,以便到达可以匹配 ,\d 的点。 .
