我试图使用正则表达式来分割EDIFACT行。在EDIFACT中,一行的组成部分由一个标记分隔,通常是#34; +"。 " +"可以通过前面的"?"进行转义。我可以使用表达式
来实现这一点(?<!\?)\+
到目前为止一切顺利。但是,转义字符本身可以通过加倍来转义(&#34; ??&#34;)。以下是一些示例和拆分时的输出
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)
这是我挣扎的第三个人。我如何根据需要调整我用来表达的表达式?
答案 0 :(得分:2)
无法使用基于外观的regexp拆分可以转义实体的字符串。相反,匹配是一种更可靠的方法:匹配所有不是转义序列而不是分隔符的子串,然后匹配那些。
(?:[^?+]|\?.)+
请参阅regex demo
(?:[^?+]|\?.)+
模式匹配?
和+
以外的1 +个字符或文字?
的序列,后跟任何字符(但没有DOTALL修饰符的换行符)