2017-07-19 114 views
6

我试图做一些相当简单的事情,在Python中正则表达式......多数民众赞成在我的想法至少。正则表达式:匹配白色空间之间的词

我想要做的是匹配字符串中的单词,如果它的前面和后面是空格。如果它在字符串的开始处没有以前所需的空白 - 如果它在最后,也不搜索空白。

例子:

"WordA WordB WordC-WordD WordE" 

我想匹配WordA WordB WordE

我只能用这样的方式过于复杂想出了......

(?<=(?<=^)|(?<=\s))\w+(?=(?=\s)|(?=$)) 

在我看来,必须有这样一个简单的问题,一个简单的方法.... 我想我可以从(?<=\s|^)开始,但这看起来不可能,因为“后视需要固定宽度模式”。

回答

6

你似乎在Python中工作,因为(?<=^|\s)在PCRE,Java和Ruby中是完全有效的(而.NET正则表达式支持无限宽度的lookbehind模式)。

使用

(?<!\S)\w+(?!\S) 

它将匹配所附带的空白或开始/结束字符串1个或多个单词字符。

请参阅regex demo

图案的详细资料

  • (?<!\S) - 失败的比赛一旦发动机负回顾后立即找到了非空白字符到当前位置
  • \w+左边 - 1个或多个字chars
  • (?!\S) - 一旦引擎在当前位置右侧立即找到一个非空白字符,就会导致匹配失败的负面预测。
+0

这很合理!谢谢。我猜想搜索nonwhitespace而不是空白要容易得多。 – SyntaxError

+0

不确定它更容易,但效率更高。 –

相关问题