Skip to main content
 首页 » 编程设计

c#之C# 中的正则表达式如何仅替换捕获组而不替换非捕获组

2024年02月05日31Leo_wl

我正在使用 C# 在 Visual Studios 2013 Express 中编写正则表达式。我试图在每个包含单词和 !@#$%^&*()_- 的字符串周围加上单引号,除了:

  • 和
  • 或
  • 不是
  • 空()
  • notempty()
  • 当前日期()
  • 任何已经用单引号引起来的字符串。

这是我的正则表达式及其作用的示例: https://regex101.com/r/nI1qP0/1

我只想在捕获组两边加上单引号,而让非捕获组保持不变。我知道这可以通过环顾四周来完成,但我不知道怎么做。

请您参考如下方法:

你可以使用这个正则表达式:

(?:'[^']*'|(?:\b(?:(?:not)?empty|currentdate)\(\)|and|or|not))|([!@#$%^&*_.\w-]‌​+) 

此处忽略的匹配项不会被捕获,可以使用 Match.Groups[1] 检索要引用的词。然后,您可以在 Match.Groups[1] 周围添加引号,并根据需要替换整个输入。

RegEx Demo