如何用正则表达式提取连字符前的内容(不含连字符)?
解决正则提取连字符前内容的问题
我来帮你搞定这个正则问题!你当前用.*\-得到的结果带连字符,是因为这个表达式会匹配到连字符本身。我们可以调整正则,只捕获连字符前面的部分,同时只处理带连字符的字符串,不带连字符的就忽略,完美符合你的需求。
方法1:使用正向预查(零宽度断言)
推荐用这个简洁的正则:
^[a-z]+(?=-)
正则解释:
^:匹配字符串开头,确保我们从最起始位置开始匹配[a-z]+:匹配一个或多个小写字母(完全贴合你例子里的语言代码格式)(?=-):正向预查,仅当后面紧跟连字符时才匹配前面的内容,且不会把连字符包含在结果里
测试你的用例:
en-US→ 匹配结果为en✅en-UK→ 匹配结果为en✅en→ 无匹配结果(因为没有连字符)✅nl-NL→ 匹配结果为nl✅nl-BE→ 匹配结果为nl✅nl→ 无匹配结果 ✅
方法2:使用捕获组
如果你的正则工具支持捕获组,可以用这个表达式:
^(.*)-
然后提取第一个捕获组的内容即可。
正则解释:
^:匹配字符串开头(.*):将连字符前的所有内容捕获到第一个分组中-:匹配连字符本身
如果是用替换功能的场景,可以用查找模式:
^(.*)-.*$
替换为$1,这样带连字符的字符串会被替换成连字符前的内容,不带连字符的字符串不会被匹配,也就不会被修改。
内容的提问来源于stack exchange,提问作者user11480180
相关产品推荐
相关产品推荐

