【发布时间】:2021-05-26 21:38:41
【问题描述】:
要匹配以下文本:
文字:SS~B66\88~PRELIMINARY PAGES\M01~HEADING PAGES
格式如下:<code1>~<description1>\<code2>~<description2>\<code3>~<description3>....<codeN>~<descriptionN>
我使用了这个正则表达式:[A-Z0-9 ]+~[A-Z0-9 ]+(?:\\[A-Z0-9 ]+~[A-Z0-9 ]+)+
所以:
案例 1。 SS~B66\88~初步页面\M01~标题页(Match: OK)
案例 2。 SS~B66\88~初步页面~标题页(No Match: OK because I removed the code 'M01')
案例 3。 SS~B66~初步页面\M01~标题页(No Match: OK because I removed the code '88')
更多示例:
-
SS~B66\88~MEKLKE\M01~MOIIE
-
B~A310\0~PRELIM@INARY\00-00~航向
我的问题是<code> 和<description> 可以接受任何类型的字符,所以当我将正则表达式替换为:
我的新正则表达式 .+~.+(?:\\.+~.+)+ ,但它可以匹配 case 2 和 case 3。
感谢您的帮助。
【问题讨论】:
-
感谢您的回答。是的,我知道我已经尝试过了。+?但它会在第一个匹配的字符处停止
-
您声明示例数据有
<code>~<description>,但这有3 个部分SS~B66\88~PRELIMINARY,有2 个部分PAGES\M01~HEADING,最后有一个单独的词。你可以让它非常具体,但这就是你所追求的吗? regex101.com/r/P7mjjG/1你能举一个字符串的例子,它包含应该仍然匹配的各种字符与不应该匹配的字符吗? -
每次用“\”分隔后只有一个块:例如
<code>~<description> \ <code>~<description> \ <code>~<description> -
我编辑了问题
-
可以使用
^[^~]+~[^\\]+(?:\\[^~]+~[^\\]+)+$,见regex demo。