正则表达式在管道分隔的字符串中查找两个字符串
Regex to find two strings within a pipe delimited string
如果管道之间出现以下两个词,我需要在定界字符串中找到匹配项:apple 和 red
示例字符串 1(应该匹配):
|big blueberries blue|awesome lemon yellow|apple nice delicious red|
示例字符串 2(不应匹配):
|big blueberries apple|awesome lemon yellow|nice delicious red|
RegEx 尝试过:
^.*?apple.*?red.*?
哪种(有点)有效,但不确定如何包含管道逻辑,即在管道之间搜索。
如果管道之间需要出现“苹果”和“红色”,请使用:
^.*?apple[^|]*red.*?
解释:强制“apple”和“red”之间的任何字符都不是管道符号|
。也可以去掉贪心匹配?
,然后.
在regex101...
亲自看看
如果该顺序中的 2 个单词必须在 2 个管道之间:
^[^|\r\n]*\|.*?\bapple\b[^|\r\n]*\bred\b[^|\r\n]*\|.*
^
字符串开头
[^|\r\n]*\|
匹配除 |
以外的任何字符或换行符,然后匹配 |
.*?
尽可能少的匹配
\bapple\b
匹配单词 apple
[^|\r\n]*
匹配 |
或换行符 以外的可选字符
\bred\b
匹配红色这个词
[^|\r\n]*\|
匹配除 |
以外的任何字符或换行符,然后匹配 |
.*
匹配行的其余部分
如果顺序无关紧要,您可以对 apple 或 red 使用捕获组,然后再次匹配同一个词,断言它使用的是否定查找头和尚未匹配的反向引用:
^[^|\r\n]*\|.*?\b(apple|red)\b[^|\r\n]*\b(?!)(?:apple|red)\b[^|\r\n]*\|.*
再看一个.NET regex demo
如果管道之间出现以下两个词,我需要在定界字符串中找到匹配项:apple 和 red
示例字符串 1(应该匹配):
|big blueberries blue|awesome lemon yellow|apple nice delicious red|
示例字符串 2(不应匹配):
|big blueberries apple|awesome lemon yellow|nice delicious red|
RegEx 尝试过:
^.*?apple.*?red.*?
哪种(有点)有效,但不确定如何包含管道逻辑,即在管道之间搜索。
如果管道之间需要出现“苹果”和“红色”,请使用:
^.*?apple[^|]*red.*?
解释:强制“apple”和“red”之间的任何字符都不是管道符号|
。也可以去掉贪心匹配?
,然后.
在regex101...
亲自看看如果该顺序中的 2 个单词必须在 2 个管道之间:
^[^|\r\n]*\|.*?\bapple\b[^|\r\n]*\bred\b[^|\r\n]*\|.*
^
字符串开头[^|\r\n]*\|
匹配除|
以外的任何字符或换行符,然后匹配|
.*?
尽可能少的匹配\bapple\b
匹配单词 apple[^|\r\n]*
匹配|
或换行符 以外的可选字符
\bred\b
匹配红色这个词[^|\r\n]*\|
匹配除|
以外的任何字符或换行符,然后匹配|
.*
匹配行的其余部分
如果顺序无关紧要,您可以对 apple 或 red 使用捕获组,然后再次匹配同一个词,断言它使用的是否定查找头和尚未匹配的反向引用:
^[^|\r\n]*\|.*?\b(apple|red)\b[^|\r\n]*\b(?!)(?:apple|red)\b[^|\r\n]*\|.*
再看一个.NET regex demo