正则表达式中的多个 Or 条件

Multiple Or Conditions in Regex

假设我有混乱的数据模式:

我正在尝试使用正则表达式过滤前缀为“-”或“_”的前缀,以及不带前缀的前缀。

期望的输出

column1     column2     column3
=========== =========== ===========
TRND        -           0LL2134.SV
TRN         _           RTXDFT.SV
TRND        _           ZRSFTFF.SV
<blank>     <blank>     DR3345.SV

到目前为止我用过[​​=12=]

\-|\_

过滤带有“-”或“”的前缀,但很难过滤不带有“-”或“”前缀的字符串

使用[-_]?匹配可选分隔符。

对第一个词使用 non-greedy 量词,这样如果没有分隔符,它将为空白,并且该词将与第 3 列相关联。

^([A-Z0-9]*?)([-_]?)([A-Z0-9]+\.SV)$

DEMO

使用 ? 使组可选

^(([A-Z]+)[-_])?(\w+.SV)$

Demo

如果你想精确匹配字符序列 TRN(D) 比:

^((TRND?)[-_])?(\w+.SV)$

您的匹配表达式应包含 3 组数据,以便将数据输入输出的每一列并固定在测试字符串的开头。

具体来说,试试...

/^((.*)([_-])(.*))|^([^_-]+)$/

捕获组 #2、3、4 将包含分别进入第 1、2、3 列的数据;如果测试字符串中有 none 个分隔字符,则第 3 列的内容将在捕获组 #5

根据您描述问题的方式,此模式将始终 匹配 - 唯一的区别在于测试字符串如何分配到列槽中。如果有效的测试字符串需要以 .SV 结尾,请使用

/^((.*)([_-])(.*[.]SV))$|^([^_-]+[.]SV)$/

由于您没有说明您在哪个编程环境中操作,此答案无法指定如何使用正则表达式。

Regex101.com 上有 Variant 1 and Variant 2

的在线示例