C# 如何删除孤立的1';如果后面有带正则表达式的字母,则为s?
问题:C# 如何删除孤立的1';如果后面有带正则表达式的字母,则为s?,c#,regex,C#,Regex,问题: Regex.Replace("1b-12", @"\b1(\w+)\b", @"$1", RegexOptions.IgnoreCase); 输入:1b-12 产出:b-2 期望输出:b-12 我当前使用的代码: Regex.Replace("1b-12", @"\b1(\w+)\b", @"$1", RegexOptions.IgnoreCase); 问题: Regex.Replace("1b-12", @"\b1(\w+)\b", @"$1", RegexOptions.Igno
Regex.Replace("1b-12", @"\b1(\w+)\b", @"$1", RegexOptions.IgnoreCase);
输入:1b-12
产出:b-2
期望输出:b-12
我当前使用的代码:
Regex.Replace("1b-12", @"\b1(\w+)\b", @"$1", RegexOptions.IgnoreCase);
问题:
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)", "")
见正则表达式。注意:您不需要使用RegexOptions.IgnoreCase
作为\p{L}
和[a-zA-Z]
匹配小写和大写字母
详细信息
-这里是一个单词的开头\b
-a1
char1
-紧接着是1+个字母,然后是单词的结尾。另外,由于这是一个不消耗字符的前瞻模式,所以替换模式可以保持为空(?=\p{L}+\b)
\w+
替换为\p{L}
,\w
也匹配数字。使用@“\b1(\p{L})\b”
或@“\b1(\p{L}+)\b”
Wiktor你太好了,我真的被困在尝试各种替换w+的方法中,只是没有得到它。你的解决方案非常有效,我不可能要求得到比这更好的答复。非常感谢。(只要计时器允许,我会接受答案)@Luuk对,你说得对,没有具体说明。单词边界总是如此。有很多不同的解决方案,除非OP需要满足任何特定的场景,否则我不想用多余的建议来污染答案。