我是RegEx的新手,因此对RegEx有疑问。我在C#中编写代码,需要提出一个正则表达式来查找匹配的字符串。
我得到的字符串的可能组合是,
XYZF44DT508755
ABZF44DT508755
PQZF44DT508755
所以我需要检查的是字符串是以XY还是AB或PQ开头。
我想出了这个,它不起作用。
^((XY|AB|PQ).){2}
注意:我不想使用常规字符串StartsWith()
更新
现在,如果我想尝试像这样的新匹配条件 -
If string starts with "XY" or "AB" or "PQ" and 3rd character is "Z" and 4th character is "F"
如何为此编写RegEx?
答案 0 :(得分:3)
您可以将表达式修改为以下内容并使用IsMatch()
方法。
Regex.IsMatch(input, "^(?:XY|AB|PQ)")
与.
(任何单个字符)结合的外部捕获组正在尝试匹配第三个字符,然后由于范围量词{2}
而重复该序列两次...
根据您更新的编辑,您只需在分组构造后放置“ZF”即可。
Regex.IsMatch(input, "^(?:XY|AB|PQ)ZF")
答案 1 :(得分:2)
您只想测试^(XY|AB|PQ)
。您的RegEx意味着:搜索XY,AB或PQ,然后搜索随机字符,并重复整个序列两次,例如" XYKPQL"会匹配您的RegEx。
这是regex101上匹配的屏幕截图:
^
强制开始行,
(...)
创建一个匹配的组和
XY|AB|PQ
匹配XY,AB或PQ。
如果您希望接下来的两个字符为ZF,只需将ZF附加到RegEx,使其变为^(XY|AB|PQ)ZF
。
查看regex101,这是测试RegExes的好方法。
答案 2 :(得分:1)
你走在正确的轨道上。 ^(XY|AB|PQ)
应该正确匹配您的字符串。
^((XY|AB|PQ).){2}
的问题在于{2}
整个群组。这意味着正好出现2次。这将是前2个字符的2次出现,加上.
(任何单个字符),这意味着这将匹配XY_AB_
之类的字符串。 _
可以是任何内容。
您可能希望.
匹配更大的字符串。在这种情况下,您可以尝试^((XY|AB|PQ)\w*)
行。 \w*
将匹配0个或多个“单词字符”,因此这应该匹配所有XYZF44DT508755
到空格,换行符,标点符号等,而不仅仅是{{1}在开头。
有一些很好的工具用于理解正则表达式,我的最爱之一是debuggex。
要回答您更新的问题:
如果字符串以“XY”或“AB”或“PQ”开头,第3个字符为“Z”且第4个字符为“F”
正则表达式是(假设你想匹配整个“单词”)。 ^((XY | AB | PQ)ZF \ W *)