【发布时间】:2012-05-31 07:58:57
【问题描述】:
我必须按照以下规则处理字符串:
- 它可能以也可能不以一系列
'开头。 - 它可能会也可能不会以一系列
'结尾。 - 应提取上述内容之间的任何内容。但是,包含的字符串也可能包含也可能不包含一系列
'。
例如,我可以得到以下字符串作为输入:
''''aa''''''''aaaa''''''''aa''bb''cc''''
对于上面的例子,我想分别从中提取以下内容:
-
aa aaaaaa''bb''cc
我在 Java 中尝试了以下代码:
Pattern p = Pattern.compile("[^']+(.+'*.+)[^']*");
Matcher m = p.matcher("''''aa''bb''cc''''");
while (m.find()) {
int count = m.groupCount();
System.out.println("count = " + count);
for (int i = 0; i <= count; i++) {
System.out.println("-> " + m.group(i));
}
但我得到以下输出:
count = 1
-> aa''bb''cc''''
-> ''bb''cc''''
任何指针?
编辑:没关系,我在正则表达式的末尾使用了*,而不是+。做这个改变给了我想要的输出。但我仍然欢迎对正则表达式进行任何改进。
【问题讨论】:
-
看看这个问题,我认为这是一个好的开始:stackoverflow.com/questions/2088037/trim-characters-in-java
-
谢谢。我确实想过使用修剪,但我打消了这个想法。我想这会比使用正则表达式更好,不是吗?
-
好吧,修剪实际上不会这样做。问这个问题的人我肯定是这样问的,因为他们所追求的操作在逻辑上似乎与 trim 所做的类似。但是看看那里接受的答案。建议是使用一种称为“strip”的方法来完成您想要做的事情。除非您出于教育目的这样做,否则我会这样做。
-
实际上,我现在意识到我要寻找的不过是“修剪”,即从字符串的开头和结尾修剪
'。 (我只是惊讶于我在这里是多么愚蠢!) -
Trim 在 Java 中不会这样做。它仅适用于空格。但是,来自 Apache Commons 的
strip确实具有该功能。