Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除孤立的1';如果后面有带正则表达式的字母,则为s?_C#_Regex - Fatal编程技术网

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
    -这里是一个单词的开头
  • 1
    -a
    1
    char
  • (?=\p{L}+\b)
    -紧接着是1+个字母,然后是单词的结尾。另外,由于这是一个不消耗字符的前瞻模式,所以替换模式可以保持为空

\w+
替换为
\p{L}
\w
也匹配数字。使用
@“\b1(\p{L})\b”
@“\b1(\p{L}+)\b”
Wiktor你太好了,我真的被困在尝试各种替换w+的方法中,只是没有得到它。你的解决方案非常有效,我不可能要求得到比这更好的答复。非常感谢。(只要计时器允许,我会接受答案)@Luuk对,你说得对,没有具体说明。单词边界总是如此。有很多不同的解决方案,除非OP需要满足任何特定的场景,否则我不想用多余的建议来污染答案。