如何改写正则表达式使Group 8与Group 5匹配规则一致?
解决正则表达式Group 8匹配多空格分隔单词的问题
嘿,我懂你的处境!刚接触正则没多久,整体进展还算顺利,但卡在了Group 8的匹配上——想让它和Group 5一样能识别多个空格分隔的单词,但之前用的(.+)好像没法直接复用对吧?
其实很简单,你只需要把Group 8对应的(.+)替换成和Group 5完全一致的匹配模式就行。举个常见的例子,如果Group 5用的是这种能匹配多空格分隔单词的表达式:
(\w+(?: \w+)*)
那直接把Group 8的部分换成这个就ok了。
给你拆解下这个表达式的作用:
\w+:匹配单个由字母、数字或下划线组成的单词(如果你的单词包含特殊字符,可以把\w换成对应的字符集,比如[a-zA-ZÀ-ÿ0-9_-]来支持带重音的字符)(?: \w+)*:这是一个非捕获组,用来匹配“空格+单词”的组合,*表示这个组合可以出现0次或多次——这样就能实现“单个单词”或者“多个空格分隔的单词”的匹配了,完全和Group 5的逻辑一致。
要是你原来的Group 5还有其他特殊规则(比如允许连字符、限制长度之类的),直接照搬那部分的规则到Group 8就好,不用纠结(.+)的限制,毕竟(.+)是贪婪匹配所有字符,本来就不适合精准匹配多单词场景~
内容的提问来源于stack exchange,提问作者David Kachlon
相关产品推荐
相关产品推荐

