RegEx:根据前两个字符查找匹配项

时间:2015-02-06 22:46:45

标签: c# regex

我是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?

3 个答案:

答案 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上匹配的屏幕截图:

regex matches

^强制开始行,
(...)创建一个匹配的组和
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 *)

Regular expression visualization

Debuggex Demo