除非标记转义,否则拆分标记上的字符串,但忽略转义的转义字符



我正在尝试使用正则表达式来拆分EDIFACT行。在EDIFACT中,一行的组成部分由一个标记分隔,通常为"+"。"+"可以通过在其前面加一个"?"来转义。我可以使用表达式来实现这一点

(?<!?)+

到目前为止还不错。但是,转义字符本身可以通过加倍("??")进行转义。以下是一些例子和拆分时的输出

ABC+DEF+GHI => ABC, DEF and GHI      (3 elements)
ABC?+DEF+GHI => ABC?+DEF and GHI     (2 elements)
ABC??+DEF+GHI => ABC??, DEF and GHI  (3 elements)

这是我正在努力解决的第三个问题。我该如何调整我使用的表达式,使其符合要求?

可以具有转义实体的字符串不能使用基于查找的regexp进行拆分。相反,匹配是一种更可靠的方法:匹配所有不是转义序列而不是分隔符的子字符串,然后匹配那些是转义序列的子字符串。

(?:[^?+]|?.)+

查看regex演示

(?:[^?+]|?.)+模式匹配除?+之外的1+个字符,或后面跟有任何字符的文字?的序列(但不带DOTALL修饰符的换行符)。

最新更新