我需要C#正则表达式,所以它在数字后面紧跟字母X.附: 12XX不应该匹配(因为XX)。
例如,“这是ABC 15x DEF”,它应匹配“15x”
答案 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)
- 负向前瞻;
如果您还要捕获15X - 传递RegexOptions.IgnoreCase
标记或将x
替换为[Xx]
。