Ruby 2.4.2正则表达式需求:除句号后接asd外按句号分割字符串
解决Ruby中按句号分割但排除特定后续内容的问题
嘿,作为正则新手遇到这种场景太正常了,别慌!你需要的是用正则表达式的正向负向预查来精准控制分割时机。
问题分析
你原来的str.split(/\./)会把所有句号都当成分割符,所以把qwer.asd也拆成了两部分。我们要做的是:只分割那些**后面没有紧跟asd**的句号。
解决方案
用这个正则作为分割符就可以实现需求,对应的Ruby代码如下:
str = "qwer.qwer.asd" output = str.split(/\.(?!asd)/) puts output.inspect # 输出 => ["qwer", "qwer.asd"]
正则逻辑拆解
\.:匹配句号本身(因为句号在正则里是匹配任意字符的通配符,必须加反斜杠转义才能匹配真实的句号)(?!asd):这是正向负向预查,意思是“当前位置的后面不能紧接着出现asd这三个字符”。它不会消耗任何字符,只是做一个条件判断,所以完全不会影响qwer.asd里的内容保留。
如果之后需要调整排除的后缀,直接把asd换成目标内容就行啦!
内容的提问来源于stack exchange,提问作者Pedro Sturmer
相关产品推荐
相关产品推荐

