如何使用正则匹配两个###分隔符之间的特定逗号字符
解决方案
方案1:直接匹配目标逗号(支持变长后视的正则引擎可用)
如果你的使用环境支持可变长度后视断言(比如Python、.NET、Java 9+、PHP等),可以直接用如下正则匹配两个###包裹范围内的逗号:
(?<=###(?:(?!###).)*),(?=(?:(?!###).)*###)
正则解释
(?<=###(?:(?!###).)*):正向后视断言,确保当前逗号的前方,最近出现的特殊标记是###,且中间没有其他###,即逗号处于第一个###的后方范围,:匹配目标逗号(?=(?:(?!###).)*###):正向前视断言,确保当前逗号的后方,下一个出现的特殊标记是###,且中间没有其他###,即逗号处于第二个###的前方范围
两个断言叠加即可限定匹配到的逗号一定在一对###的包裹范围内。
方案2:全正则引擎兼容方案(更推荐)
如果你的环境不支持变长后视(比如JavaScript、旧版本Java等),最稳妥的实现方式是先匹配整段###包裹的内容,再在匹配回调中处理内部的逗号,示例(Python代码):
import re origin_str = "# ### This is a test, and I do not know what to do ### and here, we have some more information, all separated by comma" # 示例为将包裹内的逗号替换为空,如需替换为其他内容修改replace的第二个参数即可 result = re.sub( r'(###.*?###)', lambda match_obj: match_obj.group(1).replace(',', ''), origin_str ) print(result)
内容的提问来源于stack exchange,提问作者eemceebee
相关产品推荐
相关产品推荐

