带有-SDR的替代正则表达式?

时间:2019-11-07 17:59:33

标签: c# regex

我的C#中包含以下正则表达式:

(?<!\w)M20A\w+

实际代码:

string regex = $@"(?<!\w){prefix}\w+";

请注意,前缀var匹配M20A和X50G之类的字符串。

它完全符合以下情况:

M20A0820
M20A1234
M20A7U8V

但是现在我从企业那里获得了一个新的要求,例如:

M20A-SDR

它将是前缀,后跟确切的字符串“ -SDR”。不仅是一个破折号,后跟3个字母数字,而且实际上是“ -SDR”。现有的匹配项仍然需要工作,但是前缀+“ -SDR”也必须匹配。

符合以下条件的正则表达式是什么:

M20A0820
M20A1234
M20A7U8V
M20A-SDR

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

string regex = $@"(?<!\w){prefix}\w*(?:-SDR)?";

请参见regex demo

或者,要匹配整个单词,可以使用单词边界:

string regex = $@"\b{prefix}\w*(?:-SDR)?\b";

请参见this regex demo

如果\b中的所有值都以字符char,字母,数字或prefix开头,则_单词边界将适用。如果在-SDR之后没有更多的字符,则末尾的单词边界将变得有意义。

(?:-SDR)?会与-SDR字符串相符。

详细信息

  • \b-单词边界
  • M20A-文字字符串
  • \w*-0个以上的字符字符
  • (?:-SDR)?-匹配1或0次(因为后面有?)和-SDR子字符串的非捕获组
  • \b-单词边界。