2017-02-28 68 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`与该模式分割功能