所以这是我的字符串:
"""$10. 2109 W. Chicago Ave., 773-772-0406, <a href="http://www.theoldoaktap.com/">theoldoaktap.com</a>"""
我知道这是正确的正则表达式,可以给我我想要的东西(输出如下):
age = re.match(r'\$([\d.]+)\. (.+), ([\d-]+)', example)
print age.groups()
output ====> ('10', '2109 W. Chicago Ave.', '773-772-0406')
但即使在阅读了doc:
后,我对正则表达式也有一些疑问error:unbalanced parenthesis
分解?不管我是否事先指定$,正则表达式都不能在$之后获取价格吗?如果我希望输出为10美元而不是10美元,那么为什么我不能将$移到内部而只是运行r'\($[\d.]+)
?它引发了另一个不平衡的括号错误。(.+),
之后,逗号是python知道我们完成的唯一方法是将值插入第二个元组值槽吗?所以,(。+)并不能真正意味着任何角色&#39;可以?如果恰好跟在数字后面,逗号会将其移动到下一个字符,对吗?答案 0 :(得分:3)
当与()括号分组时,那些是正则表达式最终返回的单独元组值,对吗?
正确
如果我删除$符号,为什么整个事情完全崩溃并出现错误:不平衡的括号?不管我是否事先指定了$,正则表达式是否应该能够在$之后获取价格?
如果删除美元符号,则转义字符\
将转义开头括号字符(
,告诉正则表达式引擎不要将其视为需要在字符串中搜索的文字字符。
在(。+)之后,在中间,是逗号是python知道我们完成的唯一方法是将值插入到第二个元组值槽中吗?
是的,它告诉Python在最后一个逗号之前捕获几乎任何字符中的一个或多个。 .
匹配几乎任何单个字符。 .+
匹配几乎任何字符中的一个或多个。
请注意,.+
是贪婪的,这意味着它会在最后一个之前继续捕获逗号。如果您希望它在第一个逗号之前停止,您可以使用.+?
有人可以解释括号内的+符号的位置,而不是外部,以及它如何产生影响?
它不会改变+
的行为,无论是在内部还是外部。它只会改变被捕获到群组中的内容。
修改强>
为什么我不能移动$ inside而只是运行r'($ [\ d。] +)?它引发了另一个不平衡的括号错误。
这是因为$
也具有特殊含义(意味着匹配行尾),就像正则表达式中的(
和)
一样,这意味着你需要转义它想要的匹配文字字符就像你转义括号一样:\$
。