繁体   English   中英

Python w +仅匹配单词的一个字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM