匹配以 ~ 分隔的重复块
match repeated blocks separated by ~
匹配以下文字:
文本:SS~B66~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~初步PAGES\M01~标题页(Match: OK)
案例 2。 SS~B66~初步页面~标题页面(No Match: OK because I removed the code 'M01')
案例 3。 SS~B66~初步 PAGES\M01~标题页 (No Match: OK because I removed the code '88')
更多示例:
SS~B66~MEKLKE\M01~MOIIE
B~A310[=69=]~PRELIM@INARY[=70=]-00~HEADING
我的问题是 <code>
和 <description>
可以接受任何类型的字符,所以当我将正则表达式替换为:
我的新正则表达式 .+~.+(?:\.+~.+)+
,但它可以匹配 case 2 和 case 3.
感谢您的帮助。
您可以使用否定字符 class [^~\]
,而不是使用无法匹配所有允许字符的 [A-Z0-9 ]
或会匹配太多字符的 .+
匹配除 \
和 ~
之外的任何字符以设置匹配部分的边界。
^[^~]+~[^~\]+(?:\[^~]+~[^~\]+)+$
^
字符串开头
[^~]+~
匹配除 ~
以外的任何字符,然后匹配 ~
[^~\]+
重复匹配除 ~ and
` 之外的任何字符 1+ 次
(?:
非捕获组
\[^~]+~[^~\]+
在除 ~
之前和 ~
\
之后 之外的其他字符之间匹配 \
和 ~
)+
关群重复1次以上至少匹配一个\
$
字符串结束
Regex demo (演示包含 \n
以不在示例数据中越过换行符)
匹配以下文字:
文本:SS~B66~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~初步PAGES\M01~标题页(Match: OK)
案例 2。 SS~B66~初步页面~标题页面(No Match: OK because I removed the code 'M01')
案例 3。 SS~B66~初步 PAGES\M01~标题页 (No Match: OK because I removed the code '88')
更多示例:
SS~B66~MEKLKE\M01~MOIIE
B~A310[=69=]~PRELIM@INARY[=70=]-00~HEADING
我的问题是 <code>
和 <description>
可以接受任何类型的字符,所以当我将正则表达式替换为:
我的新正则表达式 .+~.+(?:\.+~.+)+
,但它可以匹配 case 2 和 case 3.
感谢您的帮助。
您可以使用否定字符 class [^~\]
,而不是使用无法匹配所有允许字符的 [A-Z0-9 ]
或会匹配太多字符的 .+
匹配除 \
和 ~
之外的任何字符以设置匹配部分的边界。
^[^~]+~[^~\]+(?:\[^~]+~[^~\]+)+$
^
字符串开头[^~]+~
匹配除~
以外的任何字符,然后匹配~
[^~\]+
重复匹配除~ and
` 之外的任何字符 1+ 次
(?:
非捕获组\[^~]+~[^~\]+
在除~
之前和~
\
之后 之外的其他字符之间匹配
\
和~
)+
关群重复1次以上至少匹配一个\
$
字符串结束
Regex demo (演示包含 \n
以不在示例数据中越过换行符)