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

时间:2014-02-15 15:56:30

标签: python regex

我有这个正则表达式

<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。

为什么会这样?

2 个答案:

答案 0 :(得分:1)

使用[\s<>\w/,]*(\w+)时,[\s<>\w/,]*会占用所有内容并留下足够的字符(\w+)来匹配(这是最后一个字符)。这解释了你得到了什么。

如果您想获得1900,那么您可以进行一些小修改:

<TAG>foo</TAG>[\s"\w]*\(born[\s<>\w/,]*\b(\w+)
                                       ^^

\b将匹配单词边界,并强制(\w+)匹配最后的单词 1 - 因为内部没有单词边界

1 “Word”是由\w定义的一个或多个字符的序列。根据模式,\w可能只包含ASCII字符,也可能包含Unicode字符。

答案 1 :(得分:0)

[\s<>\w/,]*正在吃你文字中的所有内容。如果它始终固定为四位数,那么您可以使用\d\d\d\d\d{4},或者如果您坚持使用\ \w{4}\w\w\w\w

我说的是从最后替换(\w+)。这意味着最少一个或多个。