[英]Python w+ only matching one character of word
我有这个正则表达式
<TAG>foo</TAG>[\s"\w]*\(born[\s<>\w/,]*(\w+)
而这段文字
word word</TAG> "word" <TAG>foo</TAG> (born <TAG>words</TAG>, August 19, 1900
但是,所说的正则表达式仅匹配1900年的0的最后一个字符。换句话说,从“单词”一直到1900年都有一个匹配项,但是仅捕获了最后一个0。
为什么会这样呢?
使用[\\s<>\\w/,]*(\\w+)
, [\\s<>\\w/,]*
将吞噬所有内容,并留下足够的字符以供(\\w+)
匹配(这是最后一个字符)。 这说明了您得到的。
如果您想获得1900
,则可以进行一些小的修改:
<TAG>foo</TAG>[\s"\w]*\(born[\s<>\w/,]*\b(\w+)
^^
\\b
匹配一个单词边界,并强制(\\w+)
匹配的最后一个字 1 -因为有一个字内没有字的边界。
1 “单词”是由\\w
定义的一个或多个字符的序列。 根据模式, \\w
可能仅包含ASCII字符,也可能包含Unicode字符。
[\\s<>\\w/,]*
正在吞噬您文本中的所有内容。 如果其始终固定为四位数,则可以使用\\d\\d\\d\\d
或\\d{4}
或者如果坚持使用\\ w,则可以使用\\w{4}
或\\w\\w\\w\\w
。
我说的是从头开始替换(\\w+)
。 这意味着至少一个或多个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.