正则表达式:匹配空格之间的单词
Posted
技术标签:
【中文标题】正则表达式:匹配空格之间的单词【英文标题】:Regular expression: matching words between white space 【发布时间】:2017-12-24 16:11:48 【问题描述】:我正在尝试用 python 中的正则表达式做一些相当简单的事情……至少我是这么认为的。
我想要做的是匹配一个字符串中的单词,如果它的前面和后面都有一个空格。如果它在字符串的开头,则之前不需要空格 - 如果它在结尾,也不要搜索空格。
例子:
"WordA WordB WordC-WordD WordE"
我想匹配WordA WordB WordE
。
我只是想出了这样做的过于复杂的方法......
(?<=(?<=^)|(?<=\s))\w+(?=(?=\s)|(?=$))
在我看来,这样一个简单的问题必须有一个简单的方法......
我想我可以从 (?<=\s|^)
开始,但这似乎不可能,因为“后视需要固定宽度的模式”。
【问题讨论】:
【参考方案1】:您似乎在 Python 中工作,因为 (?<=^|\s)
在 PCRE、Java 和 Ruby 中完全有效(并且 .NET 正则表达式支持无限宽度的后向模式)。
使用
(?<!\S)\w+(?!\S)
它将匹配 1 个或多个用空格或字符串开头/结尾括起来的单词字符。
请参阅regex demo。
模式详情:
(?<!\S)
- 一旦引擎在当前位置的左侧找到一个非空白字符,就会导致匹配失败
\w+
- 1 个或多个单词字符
(?!\S)
- 一旦引擎在当前位置右侧找到一个非空白字符,就会导致匹配失败。
【讨论】:
有道理!谢谢。我想搜索非空白而不是空白要容易得多。 不确定它更容易,但更有效。 我不明白为什么简单的 \s+ 包围我们需要的东西不起作用 @BFurtado 因为\s
占用了一个空格。看this demo:只有一个匹配,因为两端的\s
需要左右有一个空格。 WordA
和 WordE
一端没有空格。你可能认为(\s|^)\w+(\s|$)
会起作用,但it does not match consecutive occurrences 因为(\s|$)
占用了WordA
之后的空格,因此(\s|^)
找不到WordB
匹配项。
@BFurtado 我会尝试在我的 Youtube 频道中解释它并与您分享一个链接(频道链接在我的个人资料中)。以上是关于正则表达式:匹配空格之间的单词的主要内容,如果未能解决你的问题,请参考以下文章