替换 - 如果前面有字母

时间:2012-11-20 09:21:50

标签: c# regex

我想用空格替换连字符,如果 NOT 包围两边的数字。

 string str = "Hefer 789-567 dfg-5mh";
            str = Regex.Replace(str, @"[a-zA-Z]\-(\d+)", "$1");

输出

  

Hefer 789-567 df5mh

所需的输出

  

Hefer 789-567 dfg 5mh

2 个答案:

答案 0 :(得分:4)

您可以使用否定前瞻和后瞻:(?<!\d)-|-(?!\d)说“匹配-之前没有\d的{​​{1}}或-后面没有{ {1}}”。

因此你的正则表达式就像

\d

编辑:请注意,这也会替换字符串开头或结尾的连字符。如果您想避免这种情况,可以使用string str = "Hefer 789-567 dfg-5gh"; str = Regex.Replace(str, @"(?<!\d)-|-(?!\d)", " "); (?<!\d|^)-(?=.)|(?<=.)-(?!\d|$)

答案 1 :(得分:3)

您在标题中描述的问题可以通过以下方式解决:

Regex.Replace(str, @"(?<=[A-Za-z])-", " ");

您在问题正文中描述的问题可以通过以下方式解决:

Regex.Replace(str, @"(?<!\d)-|-(?!\d)", " ");

或者没有环视:

Regex.Replace(str, @"([^\d])-|-([^\d])", "$1 $2");