我想捕获以 NC 或 VSS 开头或包含 _5 或以 _2 结尾的任何字符串。下面是我构建的,但由于某种原因它不工作
^(NC|VSS)(_5)+(_2)$
对于输入 CLKOUT_SRC_N_2
它不匹配,尽管它以 _2 结尾。
我将 Reg Ex 更改为 ^(NC|VSS)|(_5)+|(_2)$
然后 CLKOUT_SRC_P_5
匹配。这里 _5 位于字符串的末尾。如果我需要将 _5
放在字符串中间的某个位置,因为我的 prob 语句在最后说不是,我该如何修改字符串?
答案 0 :(得分:2)
根据您给出的示例和解释,我想出了以下正则表达式:
(^(NC|VSS)|.+(_5).+|(_2)$)
它相应地工作:https://regex101.com/r/SHFJhG/1
<块引用>如果我需要 _5 在中间的某个地方,我该如何修改字符串 字符串...
我在 .+
之后和之前添加了一个 (_5)
,因此它保证在出现 _5
之前和之后至少应该有一个字符。
答案 1 :(得分:1)
根据您的描述,您可以使用:
^(?:NC|VSS)|(?<!^)_5(?!$)|_2$
Demo.
细分:
^(?:NC|VSS)
- 匹配字符串开头的“NC”或“VSS”。(?<!^)_5(?!$)
- 匹配既不在字符串开头也不在结尾的“_5”。_2$
- 匹配字符串末尾的“_2”。答案 2 :(得分:1)
您可以用 2 个点将 _5
括起来,这样左边和右边至少应该有一个字符(该点匹配除换行符以外的任何字符),并使用交替 |
分隔匹配项。
^(NC|VSS)|.(_5).|(_2)$
模式匹配
^(NC|VSS)
在字符串的开头捕获第 1 组中的 NC
或 VSS
|
或.(_5).
将第 2 组中的 _5
用一个点包围起来,使其不能在字符串的开头或结尾|
或(_2)$
在第 3 组中捕获字符串末尾的 _2