C# 匹配紧跟在数字后面的单个字母x
我需要C#正则表达式,以便它与数字后面的字母X匹配。P.S.12XX不应匹配(因为XX)C# 匹配紧跟在数字后面的单个字母x,c#,regex,C#,Regex,我需要C#正则表达式,以便它与数字后面的字母X匹配。P.S.12XX不应匹配(因为XX) 例如,“This is ABC 15x DEF”,它应该匹配“15x”如果我理解正确,您需要的是以下正则表达式: [\d]+x[^x] [\d]+x(?=$|[^x]) 它匹配1个或多个数字,后跟文字字母“x”和任何非x的数字 如果您想要任何小写/大写字母而不是特定的字母x,请随意将x替换为[a-z]或[a-zA-z]。您还可以用上述替换件替换最后一部分,即被求反的集合[^x](结果是[^a-z]或类似
例如,“This is ABC 15x DEF”,它应该匹配“15x”如果我理解正确,您需要的是以下正则表达式:
[\d]+x[^x]
[\d]+x(?=$|[^x])
它匹配1个或多个数字,后跟文字字母“x”和任何非x的数字
如果您想要任何小写/大写字母而不是特定的字母x,请随意将x
替换为[a-z]
或[a-zA-z]
。您还可以用上述替换件替换最后一部分,即被求反的集合[^x]
(结果是[^a-z]
或类似内容)
另外,有关如何使用regex的说明,请访问regexr.com
//编辑:要涵盖所有可能的情况(如评论中所讨论的),请使用以下正则表达式:
[\d]+x[^x]
[\d]+x(?=$|[^x])
如果输入字符串是15x
,则前面提到的第一个版本的正则表达式将不匹配,因为后面没有“x以外的字母”(这是[^x]
要求的)-根本没有任何东西,即字符串不匹配
然而,“new”正则表达式询问匹配后的“字符”是不是x,还是字符串的结尾(可以与$
匹配)
在@Justinas Marozas answer中也可以使用负前瞻((?!something)
),只有当字符串后面的something
不匹配(因此为“负”)时才匹配。它也不在匹配的字符串/结果中包含某物
(因此为“lookahead”)
因此,最终的正则表达式是:
[\d]+x(?!x)
使用本文开头提到的第二个正则表达式可以得到相同的结果,而且同样正确——只是稍微长一点
感谢@hvd对我的答案的反馈和改进 如果您希望15倍的空间被空白包围:
@"\b\d+x\b"
如果您不希望15x被空格包围:
@"(?<!\d)\d+x(?!x)"
(?你尝试了什么?为什么我们要让你工作?应该为你工作。不:(它只匹配X,我还需要在Xt之前匹配数字,最起码,你有责任思考这个问题并明确你想要什么。你还没有这样做。
15xy
的预期结果是什么?15x.
怎么样?15x15
怎么样?15x-20x
怎么样?@Vnuuk:还有回复在评论(或代替)中,你应该用你给人们的新信息更新你的问题。你的问题明确地说“匹配单个字母x”"但在评论中,您说您还希望匹配x之前的数字。如果是后者,则更新您的问题以反映正确的信息。如果输入正好是15x
,则这将不匹配,因为x
后面不跟x
以外的字符:它后面不跟任何字符LH.问题中的示例字符串怎么样?@hvd[\d]+x[^x]*$
,then@PixelMaster那会拒绝这是abc 15x defghijklmnopqrstuvwxyz
。我不知道拒绝这个是否正确。@hvd该死的:D[\D]+x(?=$|[^x])
怎么样?那就向前看,这样就不会包括下面的字母了。