我有一個字符串 一個=」 A + F(KP醇)-g(JP-NL)+ H(JO-NK) - B + E( kp-ol)-g(ip-ml)+ h(io-mk)+ ce(jp-nl)「如何使用以除去字符之間的符號的正則表達式
現在我想刪除字符之間的+/-,看起來像字符相乘。 (ie) 在dis字符串中,將+ f轉換爲af..remove + in ...類似於整個字符串。
可以使用正則表達式
我有一個字符串 一個=」 A + F(KP醇)-g(JP-NL)+ H(JO-NK) - B + E( kp-ol)-g(ip-ml)+ h(io-mk)+ ce(jp-nl)「如何使用以除去字符之間的符號的正則表達式
現在我想刪除字符之間的+/-,看起來像字符相乘。 (ie) 在dis字符串中,將+ f轉換爲af..remove + in ...類似於整個字符串。
可以使用正則表達式
([a-zA-Z])[+-](?=[a-zA-Z])(?![^(]*\))
參見demo。替換爲$1
。
這捕獲任何+-
跡象之前,信還採用了先行斷言,「它有一個字母后它」。爲了確保它不在括號內,應該放置另一個前視圖,它聲明「不應該有一個)
,它後面沒有(
」。被捕獲的字母被替換爲後綴,因爲它存儲在$1
中。您可以使用積極lookbehind而不是捕獲組。
(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\))
Java的正則表達式將是
"(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\\))"
然後用一個空字符串替換匹配+
或-
符號。
環繞+
或-
由字邊界\b
其中字字符和非文字字符之間匹配任何人提出一個解決方案。
String s = "a+f(kp-ol)-g(jp-nl)+h(jo-nk)-b+e(kp-ol)-g(ip-ml)+h(io-mk)+c-e(jp-nl)";
System.out.println(s.replaceAll("\\b[-+]\\b", ""));
輸出:
af(kpol)-g(jpnl)+h(jonk)-be(kpol)-g(ipml)+h(iomk)+ce(jpnl)
以匹配字邊界,其存在於paranthesis的外側包圍所有+
或-
符號。
"\\b[-+]\\b(?![^()]*\\))"
實施例:
String s = "a+f(kp-ol)-g(jp-nl)+h(jo-nk)-b+e(kp-ol)-g(ip-ml)+h(io-mk)+c-e(jp-nl)";
System.out.println(s.replaceAll("\\b[-+]\\b(?![^()]*\\))", ""));
輸出:
af(kp-ol)-g(jp-nl)+h(jo-nk)-be(kp-ol)-g(ip-ml)+h(io-mk)+ce(jp-nl)
你想僅在括號外的字符之間移除它們嗎? – hwnd 2015-02-07 05:30:46
只是在括號外面..不在裏面 – lpd 2015-02-07 05:38:53