如何用Regex删除指定单词两侧字符,遇分号;即停止?
正则表达式:删除指定单词两侧字符(遇分号停止)
需求说明
需要一个正则表达式,实现以下逻辑:
- 定位指定目标单词,从单词的左右两侧分别遍历字符
- 每侧遇到第一个分号
;时停止删除,保留分号及对应方向的剩余内容 - 若处理后无有效内容留存,返回空值
示例(以目标单词url为例)
有效输入(处理后均返回1;2)
- 输入:
123url456 789;1;2 - 输入:
1;123url 456;2 - 输入:
1;2;()url() - 输入:
1;2;88^url(); - 输入:
1;2;url789 999 - 输入:
url3772;1;2
无效输入(处理后均返回空值)
- 输入:
;123url 123; - 输入:
22 url123
正则实现方案
针对目标单词url,可以使用以下正则进行替换操作(将匹配到的内容替换为空字符串):
^[^;]*url[^;]*$|^[^;]*url|url[^;]*$
规则解释
^[^;]*url[^;]*$:匹配整个字符串无分号且包含url的情况,直接匹配全串替换为空(对应无效输入的第二种情况)^[^;]*url:匹配从字符串开头到url的左侧无分号内容,替换为空url[^;]*$:匹配从url到字符串结尾的右侧无分号内容,替换为空
通用适配
如果需要适配任意目标单词,只需将正则中的url替换为你的目标单词即可。比如目标单词是path,正则改为:
^[^;]*path[^;]*$|^[^;]*path|path[^;]*$
覆盖场景
该正则支持所有要求的场景:
- 单词两侧均有分号
- 仅左侧有分号
- 仅右侧有分号
- 两侧均无分号(此时若无有效分号内容留存则返回空)
内容的提问来源于stack exchange,提问作者Mindless
相关产品推荐
相关产品推荐

