首页 > 解决方案 > 如果后面有任何带有正则表达式的字母,如何删除单独的 1?

问题描述

问题:

输入:1b-12

输出:b-2

期望输出:b-12

我目前使用的代码:

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

问题:

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

感谢您的任何帮助。

标签: c#regex

解决方案


由于\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.IgnoreCaseas\p{L}[a-zA-Z]匹配大小写字母。

细节

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

推荐阅读