替换 - 如果前面有字母



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

 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

您可以使用负的前瞻和后视:(?<!d)-|-(?!d)说"匹配前面没有d-或后面没有d-"。

因此,您的正则表达式将是这样的

string str = "Hefer 789-567 dfg-5gh";
str = Regex.Replace(str, @"(?<!d)-|-(?!d)", " ");

编辑:请注意,这也会替换字符串开头或结尾的连字符。如果要避免这种情况,可以使用 (?<!d|^)-(?=.)|(?<=.)-(?!d|$)(?<=[^d])-(?=.)|(?<=.)-(?=[^d]) .

您在标题中描述的问题可以使用以下内容解决:

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

您在问题正文中描述的问题可以使用以下内容解决:

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

或者不环顾四周:

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

相关内容

最新更新