ハイフンの両側が数字で囲まれていない場合、ハイフンをスペースに置き換えたい。
string str = "Hefer 789-567 dfg-5mh";
str = Regex.Replace(str, @"[a-zA-Z]\-(\d+)", "$1");
出力
ヘファー 789-567 DF5MH
望ましい出力
ヘファー 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");