【问题标题】:C# Regex does not match strings with a dot in [duplicate]C#正则表达式不匹配[重复]中带点的字符串
【发布时间】:2017-11-17 05:52:32
【问题描述】:

我正在尝试在一串文本中进行查找替换。我正在使用这样的正则表达式:

Regex regexText = new Regex("Test.Value");

strText = regexText.Replace(strText, value);

在此示例中,我试图在文本字符串中查找字符串“Test.Value”。但是,如果此值出现在字符串中,则不会发生替换。

如果我删除这些点,例如:

Regex regexText = new Regex("TEST");

strText = regexText.Replace(strText, value);

如果我将“TEST”这个词放在字符串中,它会很好地替换它。

有没有办法让它与带有“.”的字符串一起工作?

【问题讨论】:

  • . 应该是\. 它在正则表达式中有特殊含义。
  • 请提供准确的输入字符串strTextvalue和预期结果。 . 匹配除 .NET 正则表达式中的换行符以外的任何字符,并且它也匹配文字点。请发布您遇到问题的真实代码。
  • 除了其他字符之外,点应该匹配点......所以帖子中的代码应该可以工作(不需要你期望的方式)
  • @AlexeiLevenkov 这就是我想说的:)
  • 您的输入字符串是否包含“Test.Value”,还是“TEST.Value”?这很重要。

标签: c# regex


【解决方案1】:

你必须转义点:

Regex regexText = new Regex(@"Test\.Value");

正如您所写,正则表达式只是在寻找“Test”,后跟除换行符以外的任何字符,然后是“Value”。

最重要的是,如果您要查找的文本有点不同,不区分大小写的匹配可以帮助您:

Regex regexText = new Regex(@"Test\.Value", RegexOptions.IgnoreCase);

无论如何,在这种情况下,我认为不需要正则表达式。一个简单的字符串替换应该可以完成这项工作:

strText.Replace("Test.Value", value);

【讨论】:

  • 如果. 与点不匹配,为什么您认为更受限制的模式(因为\. 仅匹配. 字符)会有所帮助?
  • 它没有帮助,但它是 OP 中的正则表达式应该工作的方式。如果他试图替换“Test.Value”并且他的字符串包含“Test5Value”,那也将被剥离。此外,@ 可能是一个修复。如果正则表达式不成立,我还提出了一个替代方案。
  • @ 与 OP 的模式无关。此外,如果问题在于转义.,那么问题显然是What special characters must be escaped in regular expressions? 的欺骗。为什么要回答?
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多