问题:
输入: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个以上的字母,然后是单词的结尾。另外,由于这是不消耗字符的前瞻性模式,因此替换模式可以保持为空。