在字符串中到达逗号时用括号括起来

时间:2013-07-19 13:30:01

标签: java regex

我90%有一个正则表达式,但我真的很感激一些帮助,最终确定它。

我从以下字符串开始。

String toiletDer= "TOILET, BOG, PUBLIC CONVENIENCE";

//格式化代码。

我需要它成为"({BOG}|{TOILET}|{PUBLIC CONVENIENCE})"

到目前为止我的正则表达式是。

toiletDer.replaceAll("(\\p{Alpha}+)", "{$1}|").replace(",", "")

它产生following

"{TOILET}| {BOG}| {PUBLIC}| {CONVENIENCE}|"

我只希望在字符串中到达逗号时在新的{}集合中包含单词而不是新单词,这是当前它的工作方式。

4 个答案:

答案 0 :(得分:3)

岂不

String string = "({" + toiletDer.replaceAll(",\\s*","}|{") + "})"

更容易吗?

答案 1 :(得分:1)

要在匹配的部分中包含空格,您可以使用[\\p{Alpha}\\s]+。要在最后匹配|,您可以使用\\|$,因此可以尝试这种方式

toiletDer.replaceAll("\\s*([\\p{Alpha}\\s]+)", "{$1}|").replaceAll(",|\\|$", "")

我还在第一个正则表达式的开头添加了\\s*,以便在{ BOG}开头删除空格。

更新

如果您想用括号括起结果,可以在开头和结尾添加它们。 \p{Alpha}也不包含.,因为它不是字母数字字符。要将其包含在正则表达式中,您可以将其添加到[]字符类 这是更新的代码。

"(" + toiletDer.replaceAll("\\s*([\\p{Alpha}\\s]+)", "{$1}|")
    .replaceAll(",|\\|$", "") + ")";

答案 2 :(得分:0)

试试这个:

toiletDer.replaceAll("([^,]+)", "{$1}|").replace(",", "")

这假设您只有单词和逗号,而不是特殊字符或其他字符。

答案 3 :(得分:0)

将所有逗号替换为}|{,并在开头添加{,在结尾添加}

但是这仍然没有按你想要的单词排序,即你会得到{TOILET}|{BOG}|{PUBLIC CONVENIENCE}而不是{BOG}|{TOILET}|{PUBLIC CONVENIENCE}