【问题标题】:Ignoring ' (apostrophe) from RegEx忽略 RegEx 中的 '(撇号)
【发布时间】:2013-05-07 20:32:33
【问题描述】:

我有一个正则表达式,想忽略字符串中的任何 '(撇号)。正则表达式讨论可以在讨论中找到String manipulation: How to replace a string with a specific pattern

RegEx: \\(\\s*'(?<text>[^'']*)'\\s*,\\s*(?<pname>[\\w\\[\\]]+)\\s*\\)

基本上,提供的 RegEx 在 {text} 包含 '(撇号)的情况下不起作用。您能否让 RegEx 忽略 {text} 中的任何撇号?

For eg: 

substringof('B's',Name) should be replaced by Name.Contains("B's") 
substringof('B'',Name) should be replaced by Name.Contains("B'")
substringof('''',Name) should be replaced by Name.Contains("'")

欣赏!!谢谢。

【问题讨论】:

  • 看起来您要搜索的字符串类似于:( 'foo' , bar[]baz[] ) 注意:您似乎需要在字符串末尾添加撇号 '。如果您想“忽略”撇号,请尝试以下操作:([^'][']?)+ 这意味着,预期的字符集后跟可选撇号,然后重复 1 次或多次。
  • 好的,会尝试并通知您
  • 谢谢,但很抱歉这不起作用
  • 奇怪,'\([^'][']\?\)\+' 在 vi​​m 中运行良好。然而,它本身将与'B''B's' 匹配得很好。
  • 抱歉,我不明白您为什么要将'''' 替换为"'" 而不是"''"

标签: c# regex string string-matching substring


【解决方案1】:

''''的案子好像很难处理。这就是我选择使用 delegate 和另一个 replace 来解决问题的原因。

static void Main(string[] args)
{
    var subjects = new string[] {"substringof('xxxx',Name)", "substringof('B's',Name)", "substringof('B'',Name)", "substringof('''',Name)"};

    Regex reg = new Regex(@"substringof\('(.+?)'\s*,\s*([\w\[\]]+)\)");
    foreach (string subject in subjects) {
        string result = reg.Replace(subject, delegate(Match m) { return m.Groups[2].Value + ".Contains(\"" + m.Groups[1].Value.Replace("''", "'") + "\")"; });
        Console.WriteLine(result);
    }
}

【讨论】:

  • 太棒了。这对于我尝试过的几个场景非常有效。我又进行了几次测试。
  • 嗨 Casimir,我有几个在这种情况下不起作用的场景。 1. 例如:substringof('B'',Name) 应替换为 Name.Contains("B'") 和 2. substringof('''',Name) 应替换为 Name.Contains("'" )
  • \k 应该是\\k 我想?此外,这并不能解决(令人困惑的)最后一个示例(将'' 转换为')。似乎 OP 也想将两个并排的 ' 合并为一个。我们之前解决的部分应该只是.* 现在我想了。
  • 是的,我认为 \k 应该是 \\k 并对其进行了测试,但更新后的模式仍然不适用于场景 2 和 3
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
相关资源
最近更新 更多