我需要一個正則表達式來替換任何單詞中間的連字符,但不要觸及前導或尾隨單詞或獨立單詞。這是內Regex.Replace在.NET中使用()正則表達式替換字符中間的連字符
我已經試過以下
\w[-]\w
但也抓住了連字符的字符兩側。舉個例子,我需要的是以下字符串
- 測試測試測試 - 測試
如果替換字符是!,成爲
- 測試測試!測試 - 測試
任何幫助很大收到
感謝
詹姆斯
我需要一個正則表達式來替換任何單詞中間的連字符,但不要觸及前導或尾隨單詞或獨立單詞。這是內Regex.Replace在.NET中使用()正則表達式替換字符中間的連字符
我已經試過以下
\w[-]\w
但也抓住了連字符的字符兩側。舉個例子,我需要的是以下字符串
- 測試測試測試 - 測試
如果替換字符是!,成爲
- 測試測試!測試 - 測試
任何幫助很大收到
感謝
詹姆斯
如果我理解正確的問題,它是關於匹配連字符,而不是旁邊的文字。下面是一個Perl的正則表達式一樣:
(?<=\w)-(?=\w)
這是一個積極的向後斷言,一個連字符和一個積極的預測先行斷言。
用Perl(你沒有提到語言)工作的:
/\w-\w/
例如,嘗試這一個班輪:
mine:~> perl -e '$x="abc-def"; $x=~/\w(-)\w/; print "$x $1\n";'
abc-def -
或者這一個:
mine:~> perl -e '$x="abc-def"; print "$x\n";$x=~s/(\w)-(\w)/$1 $2/; print "$x\n";'
abc-def
abc def
下面是一個例子(來自評論)替換所有的相關' - '在字符串中:
mine:~> perl -e '$x="-this i-s a te-st-"; print "$x\n";$x=~s/(\w)-(\w)/$1$2/g; print "$x\n";'
-this i-s a te-st-
-this is a test-
請注意,在這個例子中,我只是刪除了破折號,而在前面的例子中,我用空格替換了它。我還將g
修飾符添加到替換命令以使其替換「 - 」的所有實例。
這個表達式用準確1連字符的所有單詞匹配它:
[a-zA-Z]+[-][a-zA-Z]+
這相當於:
\w+[-]\w+
你表達的連字符前面的字母,連字符和後面的字母相匹配連字符。它會查找所需的所有連字符,即使是帶有多個連字符的文字。你想如何替換連字符?你能對你的目標更具體嗎?
echo "- foo-bar - bar-foo -" | sed -e 's/\([[:alnum:]]\)-\([[:alnum:]]\)/\1\2/g'
如果您使用sed,您可能使用了錯誤的字符類來匹配字母數字表達式。
請您進一步詳細說明「似乎不正確匹配」?舉幾個例子。 – Moshe 2009-06-18 09:32:00
你也應該說你正在使用什麼技術/框架。並非所有的正則表達式引擎都是相同的。 – AakashM 2009-06-18 10:42:53
對不起,我不是很清楚。編輯了這個問題更有意義 – James 2009-06-18 11:06:57