2017-02-28 22 views
0

我目前正在創建一個正則表達式來分割出所有匹配以下格式的字符串:&[text(text - text text) !text]。這裏的文本可以是任何字符真的。間距很重要。文本將如圖所示列出。java正則表達式匹配和[文本(文本 - 文本文本)!文本]

我曾嘗試以下正則表達式,但我似乎無法得到它的工作:

&\\[([^\\]]*)\\] 

任何幫助將不勝感激。

+0

? –

+0

不,我正在嘗試替換匹配該模式的文本。 –

+0

所以下面的答案應該爲你工作 –

回答

1

text替換爲\w+以捕獲一個或多個單詞字符。 否則假設一切是文字,下面的正則表達式應該工作:

&\[\w+\(\w+ - \w+ \w+\) !\w+\]

你也可以使用[a-zA-Z]代替\w如果您想。它有時更容易理解,因爲它明確描述了要匹配的字符,a-zA-Z(含)。

&\[[a-zA-Z]+\([a-zA-Z]+ - [a-zA-Z]+ [a-zA-Z]+\) ![a-zA-Z]+\]

而對於只有一個字符,刪除+

&\[\w\(\w - \w \w\) !\w\]

&\[[a-zA-Z]\([a-zA-Z] - [a-zA-Z] [a-zA-Z]\) ![a-zA-Z]\]

PS - 我不記得是否-&,或!被coutned爲正則表達式的符號和如果他們是你可以通過使用\-,01使他們成爲文字或\!

P.P.S - 在java中你必須轉義\所以\w變成\\w在一個字符串中。

+0

你必須逃避'(和')'字符。 – Obicere

+0

@Obicere你是對的。我將更改答案 – Chris

+0

它仍然不工作,我試圖替換所有匹配條件的文本,如下所示:text.replaceAll(「&\\ [\\ w + \\(\\ w + - \\ w + \\ w + \\)!, \\ w + \\]「,」「),其字符串如下所示:this&[RECNUM!## 0000] test&[SUM(Patron - Account Balance)!### 0.00 ]。正則表達式應該忽略第一個宏並替換第二個宏,而不是替換任何文本。任何幫助將不勝感激。 –

0

如果你想提取text成組後與他們合作:

&\\[(\\w+)\\((\w+)\\s\\-\\s(\\w+)\\s(\\w+)\\)\\s!(\\w+)] 

example

要提取`text`與該模式分割功能