2015-02-07 91 views
1

我有一個字符串 一個=」 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 ...類似於整個字符串。

可以使用正則表達式

+0

你想僅在括號外的字符之間移除它們嗎? – hwnd 2015-02-07 05:30:46

+0

只是在括號外面..不在裏面 – lpd 2015-02-07 05:38:53

回答

1
([a-zA-Z])[+-](?=[a-zA-Z])(?![^(]*\)) 

參見demo。替換爲$1

這捕獲任何+-跡象之前,信還採用了先行斷言,「它有一個字母后它」。爲了確保它不在括號內,應該放置另一個前視圖,它聲明「不應該有一個),它後面沒有(」。被捕獲的字母被替換爲後綴,因爲它存儲在$1中。您可以使用積極lookbehind而不是捕獲組。

(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\)) 

Java的正則表達式將是

"(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\\))" 

然後用一個空字符串替換匹配+-符號。

0

環繞+-由字邊界\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) 

DEMO

以匹配字邊界,其存在於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) 
相關問題