匹配紧跟在数字后面的单个字母x

时间:2018-01-16 12:28:03

标签: c# regex

我需要C#正则表达式,所以它在数字后面紧跟字母X.附: 12XX不应该匹配(因为XX)。

例如,“这是ABC 15x DEF”,它应匹配“15x”

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你想要的是以下正则表达式:

[\d]+x[^x]

这匹配1个或多个数字,后跟文字字母“x”和任何 x。

如果您想要任何小写/大写字母而不是特定字母x,请随意将x替换为[a-z][a-zA-Z]。您还可以使用上述替换替换最后一部分,即否定集[^x](导致[^a-z]或类似)。

另外,请查看regexr.com以获取有关如何使用正则表达式的说明。

//编辑:覆盖所有可能的情况(如评论中所讨论的)使用以下正则表达式:

[\d]+x(?=$|[^x])

如果输入字符串是15x,前面提到的正则表达式的第一个版本将不匹配,因为之后没有“除x以外的字母”(这是[^x]要求的) - 这是根本没什么,即字符串不匹配。

然而,“新”正则表达式询问匹配后的“字符”是不是x,还是字符串的结尾(可以与$匹配)。

在@Justinas Marozas答案中使用否定前瞻((?!something))也是可行的,只有当something在字符串后不匹配时才匹配(因此“否定”< / em>的)。它在匹配的字符串/结果中也不包含something(因此“lookahead”)。

因此,最终的正则表达式将是:

[\d]+x(?!x)

使用在此编辑开头提到的第二个正则表达式产生相同的结果,但同样正确 - 它只是稍长一点。

感谢@hvd对我的回答的反馈和改进!

答案 1 :(得分:0)

如果您期望15x被白色空间包围:

@"\b\d+x\b"

如果您不期望15x被空白包围:

@"(?<!\d)\d+x(?!x)"

\b - 字边界; \d - 数字;

(?<!pattern) - 负面的背后; (?!pattern) - 负向前瞻;

Shorthand character reference

Look ahead/behind reference

如果您还要捕获15X - 传递RegexOptions.IgnoreCase标记或将x替换为[Xx]