问题:

输入:1b-12

输出:b-2

所需输出:b-12

我当前正在使用的代码:

Regex.Replace("1b-12", @"\b1(\w+)\b", @"$1", RegexOptions.IgnoreCase);


题:

我该如何修正我的正则表达式使1b = b,而将11b保留为11b,而11保留为11?

感谢您的任何帮助。

最佳答案

由于\w匹配字母,数字,下划线和一些组合标记,因此应使用\p{L},或者-如果只需要允许ASCII字母,则应使用-[a-zA-Z]

一个示例解决方案,该解决方案在单词开头匹配1,然后包含1个以上字母:

Regex.Replace("1b-12", @"\b1(?=\p{L}+\b)", "")
Regex.Replace("1b-12", @"\b1(?=[a-zA-Z]+\b)", "")


请参见正则表达式demo。请注意,您不需要RegexOptions.IgnoreCase,因为\p{L}[a-zA-Z]匹配大小写字母。

细节


\b-这里是一个词的开头
1-一个1字符
(?=\p{L}+\b)-紧随其后的是1个以上的字母,然后是单词的结尾。另外,由于这是不消耗字符的前瞻性模式,因此替换模式可以保持为空。

10-07 17:04