寻求匹配最多12个单词且结尾无标点的行的正确正则表达式
寻求匹配最多12个单词且结尾无标点的行的正确正则表达式
嘿,我来帮你搞定这个正则问题!你的需求很明确:找出每行最多12个单词、结尾完全没有标点的行,而且像Love's这种带撇号的单词是合法的对吧?
先说说你原来的正则为啥不太好用:^(.*?)(\w+\s?){1,12}(?!\S|$) 里的.*?会匹配任意字符(包括标点),\w+不包含撇号,会把Love's拆成两个单词,还有结尾的断言逻辑也没准确限制住“无标点结尾”的要求。
给你一个能精准满足需求的正则:
^((?:[\w']+\s){0,11}[\w']+)$
我给你拆解下每个部分的作用:
^和$:牢牢锁定行的开头和结尾,确保整行都符合规则,不会漏掉或多匹配内容(?:[\w']+\s){0,11}:这是个非捕获组,用来匹配0到11个“单词+空格”的组合——毕竟12个单词的话,前面11个单词后面都会跟个空格[\w']+:匹配最后一个单词,\w覆盖字母数字,'专门兼容像Love's这种带撇号的合法单词- 整个组合下来,就保证了行里只有1到12个合法单词,而且行的结尾就是单词的最后一个字符,完全没有标点符号
你可以用这个正则测试你的例子:
- 会匹配的行:
Love's Equal On Earth(4个单词,结尾无标点)I must confess every day for better feeling(7个单词,结尾无标点)
- 不会匹配的行:
I love the feeling.(结尾有句号)- 那些单词数超过12或者结尾带标点的长句子
如果你的场景里还需要允许单词带连字符(比如non-profit),可以把正则里的[\w']改成[\w'-]就行,灵活调整~
备注:内容来源于stack exchange,提问作者Hellena Crainicu
相关产品推荐
相关产品推荐

