两个字边界(\ b)隔离单个单词

时间:2015-08-11 19:41:18

标签: python regex

我试图匹配一个数字后面出现的单词 - 在下面的句子中,它是单词“米”。

  

塔高100英尺。

这是我尝试过的无效的模式:

\d+\s*(\b.+\b)

但是这个人做了:

\d+\s*(\w+)

第一个不正确的模式与此匹配:

  

塔高100英尺。

我不希望“高”这个词匹配。我期待以下行为:

\d+ match one or more occurrence of a digit
\s* match any or no spaces
( start new capturing group
\b find the word/non-word boundary
.+ match 1 or more of everything except new line
\b find the next word/non-word boundary
) stop capturing group

问题是我不知道关于正则表达式的问题,而且我非常喜欢菜鸟。我正在练习制造自己的问题并试图解决它们 - 这是其中之一。为什么比赛在第二次休息时停止(\b)

这是Python风味的
Here's the regex101 test link of the above regex.

2 个答案:

答案 0 :(得分:8)

它没有停止,因为class Container { var list: [AnyObject] = ["hello" , "world"]; subscript ( i : Int) -> AnyObject{ get{ return list[i] } set{ list[i] = newValue } } } var c : Container = Container() println(c[1]) c[1] = "lol" println(c[1]) 默认为greedy,您希望+进行非贪婪的匹配。

简明的解释 - +?*是贪婪的量词/运算符,意味着它们会尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。

您需要使用+跟随这些运算符进行非贪婪匹配,按上述顺序进行(?)“零或更多”或(*?) “一个或多个” - 但最好是“尽可能少”。

字边界+?也匹配一边是单词字符(字母,数字或下划线或Python 3中的unicode字母,数字或下划线)而另一边不是单词字符的位置。如果您不清楚边界之间的内容,我不会在\b周围使用\b

答案 1 :(得分:1)

它匹配两个单词,因为.匹配(几乎)所有字符,因此也是空格字符,并且因为+是贪婪的,所以它将尽可能多地匹配。如果您使用\w代替.,那么它会起作用(因为\w只匹配单词字符 - a-zA-Z_0-9)。