C#中的正则表达式:匹配前面和/或后面跟着“_”或“”或“”的字符串

时间:2015-12-11 13:32:21

标签: c# regex string pattern-matching

假设我有一个像“aus”这样的词,我想用“off”替换它的所有出现。然后我也想找到它的所有可能的拼写,如“AU”,“AU”,“AUS”等等。但重要的是它只有当它“独立”时才被取代,因为它只有一个空格,一个下划线(_)或前面和/或后面没有任何东西 所以它应该在

中替换
" aus"
"aus"
"_aus"
"_aus_"
"aus_"

但不在

"ausschalten"
"aushebeln"
" ausschalten"

我尝试了^(_| )(A|a)(U|u)(S|s)(_|)$,但它无效:/

1 个答案:

答案 0 :(得分:1)

您可以使用外观和RegexOptions.IgnoreCase标记(或其内联版本(?i)):

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

请参阅regex demo

解释

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

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

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