2

ハイフンの両側が数字で囲まれていない場合、ハイフンをスペースに置き換えたい。

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

出力

ヘファー 789-567 DF5MH

望ましい出力

ヘファー 789-567 DFG 5MH

4

2 に答える 2

4

否定先読みと後読みを使用でき(?<!\d)-|-(?!\d)ます。-\d-\d

したがって、正規表現は次のようになります

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

編集:これは、文字列の先頭または末尾のハイフンも置き換えることに注意してください。これを避けたい場合は、(?<!\d|^)-(?=.)|(?<=.)-(?!\d|$)またはを使用できます(?<=[^\d])-(?=.)|(?<=.)-(?=[^\d])

于 2012-11-20T09:27:11.143 に答える
3

タイトルで説明している問題は、次の方法で解決できます。

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

質問の本文で説明している問題は、次の方法で解決できます。

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

または見回しなし:

Regex.Replace(str, @"([^\d])-|-([^\d])", "$1 $2");
于 2012-11-20T09:33:30.327 に答える