【问题标题】:Regex in C#: match string thats preceded and/or followed by "_" or " " or ""C# 中的正则表达式:匹配前面和/或后面跟着“_”或“”或“”的字符串
【发布时间】:2015-12-11 13:32:20
【问题描述】:

假设我有一个像“aus”这样的词,我想用“off”替换它的所有出现。然后我还想找到它的所有可能拼写,例如“AUs”、“aUs”、“AUS”等等。但重要的是,它仅在它“独立”时被替换 所以它应该被替换为

" aus"
"aus"
"_aus"
"_aus_"
"aus_"

但不在

"ausschalten"
"aushebeln"
" ausschalten"

我试过^(_| )(A|a)(U|u)(S|s)(_|)$,但它不能正常工作:/

【问题讨论】:

  • [\s_]?([AUSaus]+)[\s_] 适用于您提供的单词
  • @SørenLorentzen:但是,它不适用于“aus”,它也将匹配suauuua
  • ^(_|\s)?(A|a)(U|u)(S|s)(_|\s)?$ 你是最正确的只是需要添加?所以它可以存在或不存在
  • 替换结果应该是这样的:例如" off" "off" "off" "off " "off"

标签: c# regex string pattern-matching


【解决方案1】:

您可以使用环视和RegexOptions.IgnoreCase 标志(或其内联版本(?i)):

@"(?i)(?<![\w-[_]])aus(?![\w-[_]])"

regex demo

解释

  • (?&lt;![\w-[_]]) - 检查aus 之前是否没有数字或字母字符(使用字符类减法,我从\w 类中删除了_
  • aus - 文字字符序列 aus
  • (?![\w-[_]]) - 检查aus 之后是否没有字母或数字。

simpler alternative\p{L}(任何 Unicode 基本字母)和 \p{N}(任何数字):

(?i)(?<![\p{L}\p{N}])aus(?![\p{L}\p{N}])

【讨论】:

  • 请注意(A|a)(U|u)(S|s) 语法:应尽可能避免冗余交替 - 在这种情况下,如果 .NET 正则表达式中没有不区分大小写的标志(如是 HTML5 模式属性正则表达式的情况)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
相关资源
最近更新 更多