正则匹配:提取字符串中第二个|字符与数字1或2之间的内容
正确正则写法
方案1(支持可变长度回顾断言的引擎:Python re、.NET、Java 9+等)
直接匹配即可,不需要额外处理捕获组:
(?<=^(?:[^|]*\|){2})\s*[^12]+(?=\s*[12])
匹配结果会自动剔除前后空白,针对你给出的示例字符串,直接得到目标内容Pobiedziska Letnisko。
方案2(兼容所有正则引擎,含不支持可变长度回顾的场景:JavaScript、旧版Java等)
使用捕获组提取内容:
^(?:[^|]*\|){2}\s*([^12]+?)\s*[12]
取第一个捕获组的内容即为目标结果。
规则说明
^(?:[^|]*\|){2}:从字符串开头匹配2次「非|字符 + |」的组合,准确定位到第二个|的位置\s*:跳过|后的多余空白[^12]+:匹配所有不是1、2的字符,也就是你需要提取的文本内容(?=\s*[12]):正向限定匹配到紧邻1/2之前的位置,自动排除末尾的数字和空白- 你之前的写法问题在于只匹配了单个|作为前置条件,所以会从第一个|就开始匹配。
内容的提问来源于stack exchange,提问作者FileEX
相关产品推荐
相关产品推荐

