如何用正则表达式提取两个下划线之前的合法大写/数字文本
正则表达式提取符合规则的文本解决方案
最终正则表达式
_+([A-Z0-9](?:_[A-Z0-9]|[A-Z0-9])*)(?=__|\s|$)
正则说明
_+:匹配一个或多个前置下划线,覆盖示例中单个或多个下划线开头的情况([A-Z0-9](?:_[A-Z0-9]|[A-Z0-9])*):核心捕获组,确保:- 以大写字母或数字开头
- 后续只能是大写字母/数字,或者单个下划线加大写字母/数字,从根源避免连续下划线
- 可匹配任意长度的合法序列
(?=__|\s|$):正向预查,指定捕获终止的触发条件——遇到连续下划线、空格或字符串结尾时停止捕获
示例验证
将正则应用到你的示例中,结果完全符合预期:
test_TEST_TEST_1_TEST_13DAHA bfd→ 捕获TEST_TEST_1_TEST_13DAHAtest_TEST_TEST_1_TEST__13DAHA bfd→ 捕获TEST_TEST_1_TESTtest__TEST_TEST→ 捕获TEST_TESTtest_TEST__DHJF→ 捕获TESTtest_TEST__Ddsa→ 捕获TESTtest__TEST→ 捕获TEST
补充说明
如果你的场景中,合法文本可能出现在字符串开头(无前置下划线),可以调整正则为:
(?:^|_+)([A-Z0-9](?:_[A-Z0-9]|[A-Z0-9])*)(?=__|\s|$)
这样可以匹配字符串开头的合法序列,同时保留原有场景的适配性。
内容的提问来源于stack exchange,提问作者GuillaumeA
相关产品推荐
相关产品推荐

