针对特定情况的Java正则表达式

时间:2013-07-18 03:04:16

标签: java regex

我正在尝试将字符串重新格式化为我想要的格式。我一直试图弄清楚这一点,但我想不出任何使用正则表达式的优雅解决方案。我使用String的indexOf()replace()提出了一个解决方案,但它并不完全漂亮。

我想转换任何字符串,以便在“ - ”的每一侧只有一个空格。

可能的输入:

"abc- abc"
"abc -abc"
"abc - abc"
"abc-abc" 

并且每个案例都应转换为

"abc - abc"

感谢您的帮助。如果您需要更多说明,请告诉我。

3 个答案:

答案 0 :(得分:2)

使用\s*-\s*模式:

"abc- abc".replaceAll("\\s*-\\s*", " - "))

答案 1 :(得分:1)

最简单的可能就是使用这种模式:

[ ]?-[ ]?

像这样:

str = str.replaceAll("[ ]?-[ ]?", " - ");

答案 2 :(得分:1)

使用String#replaceAll

String pattern = "\\s*-\\s*";
String s1 = "abc- abc";
String s2 = "abc -abc";
String s3 = "abc - abc";
String s4 = "abc-abc";
System.out.println(s1.replaceAll(pattern, " - "));
System.out.println(s2.replaceAll(pattern, " - "));
System.out.println(s3.replaceAll(pattern, " - "));
System.out.println(s4.replaceAll(pattern, " - "));

"\\s*-\\s*"正则表达式的解释:

  • \\s => space(实际上是\s但Java需要加倍\\
  • * => 0或更多
  • - =>简单' - '

有关正则表达式的更多信息:Regular Expression Basic Syntax Reference