用于搜索多个条件的正则表达式字符串
Posted
技术标签:
【中文标题】用于搜索多个条件的正则表达式字符串【英文标题】:Regex string to search for multiple conditions 【发布时间】:2018-10-07 05:35:27 【问题描述】:我正在尝试编写一个匹配多个复杂条件的正则表达式。我正在尝试提取ABC
之后的数字,但ABC 1234
可能出现在我的字符串中的多个位置。我还必须考虑在没有ABC
的情况下使用数字的情况,但紧随其后。比如ABC 1234 / 1134
,或者ABC 1234-1134
,或者两个数字之间的其他东西,比如and
。
我尝试匹配的字符串如下所示:
ABC-210293CompletedReports // Should match: ABC-210293
CC517036submittedbyfoobarforABC105799WRS877565 // Should match: ABC105799
ABC#86765 // Should match: ABC#86765
abc99220 / 103743 // Should match: ABC99220 / 103743
AbC99220/103743 // Should match: ABC99220/103743
ABC 123 and 1123 // Should match: ABC 123 and 1123
SubmittedbyFooBar.forABC106156.Solutionbuilton4/23/20184:22PM // Should match: ABC106156
现在,我是这个正则表达式:
((?i)ABC.(?-i))(\d[0-9]0,10)|( *(\/|-|(?i)AND(?-i)) *\d[0-9]0,10)
将匹配除最后一个字符串之外的每个字符串。它将匹配ABC106156
,但也将匹配4/23/20184:22PM
部分中的/23
和/20184
。我不知道如何在不丢失abc99220 / 103743
和AbC99220/103743
的匹配表达式的情况下排除/
。
我听说过环顾四周,但我不知道该怎么做。如何忽略此正则表达式中的日期?
【问题讨论】:
如果您知道需要忽略的确切模式,则始终可以匹配和忽略某些内容。在开头添加\d1,2/\d1,2/\d4|
,并且只使用捕获的子字符串。类似this.
您能解释一下逻辑和预期结果吗?我加倍我理解正确(就像下面的所有人一样)。查看this C# demo
【参考方案1】:
您可以使用alternation 来匹配您不想要的内容并在组中捕获您想要的内容。
您不想捕获的模式是4/23/20184:22PM
,因此您可以将其与\d\/\d+\/\d+:\d+[AP]M
匹配,或者如果您想更具体,可以使用\d2
之类的量词。
您想在组中捕获的内容可能类似于(ABC ?[#-]?\d+|\b\d+\b)
,它还使用ABC
或仅由单词边界包围的数字\b
替换模式。
(?i)(?:\d\/\d+\/\d+:\d+[AP]M|(ABC ?[#-]?\d+|\b\d+\b))
Demo C#
【讨论】:
【参考方案2】:此 RegEx 确实适用于每个给定的示例。重要的是你让它不区分大小写 (/gi
)。
它搜索ABC
,然后可以有一个可选的-
、#
或whitespace
,然后是digits
(1 个或多个)。在数字之后可以有一个可选的"/"
、" / "
或" and "
,后跟digits
(1 个或多个)。
/(ABC(?:-|#|\s)?\d+(?:\/| \/ | and )?\d+)/gi
【讨论】:
以上是关于用于搜索多个条件的正则表达式字符串的主要内容,如果未能解决你的问题,请参考以下文章