我有同样的问题,但我需要得到:
---- comment 3;comment 2;comment 1
自:
* (20-01-2012 12:53) : ---- comment 3<br/>* (20-01-2012 12:50) : comment 2<br/>* (20-01-2012 12:50) : comment 1
这意味着我的代码应该是:
string.replaceAll("\\*?.*?:", ";")
正确?
但这取代了从第一个到最后一个的所有内容:所以我得到了:
comment 1
结果是。救命啊!
链接答案 0 :(得分:1)
在上一个答案中,它使用#?
作为分隔符。在这里你写\*?
,这意味着匹配*
字面上或没有。然后,.*?
会匹配任何内容,直到:
。这意味着将发生多次替换并剥离任何直到冒号(包括)。您的替换字符串中应该有多个;
。
我看到的模式是:
* (...) : ... comment 1<br/>
<br/>
可选。
因此尝试使用正则表达式:
\* \([^)]*\) : ((?:.*?)comment \d+)(?:<br/>)?
请注意(?: ... )
使括号正则表达式不分组。您可以在http://rubular.com/r/orViHMJEMr
此处提供的正则表达式允许您获取评论。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestRegex {
public static void main(String[] args) {
String pattern_string = "\\* \\([^)]*\\) : ((?:.*?)comment \\d+)(?:<br/>)?";
String input_string = "* (20-01-2012 12:53) : ---- comment 3<br/>* (20-01-2012 12:50) : comment 2<br/>* (20-01-2012 12:50) : comment 1";
Pattern pattern = Pattern.compile(pattern_string);
Matcher matcher = pattern.matcher(input_string);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}
}
答案 1 :(得分:1)
myString = myString.replaceAll("\\*\\s+\\(.*?\\)\\s+:\\s+", "").replaceAll("<br/>", ";");
它已经尝试了。第一次替换所有替换行中的* (date/time) :
前缀,第二次替换所有用<br/>
替换;
s。
答案 2 :(得分:0)
好像您需要将<br/>* (20-01-2012 12:50) :
替换为;
。
一个好的匹配正则表达式可能是:
(<br/>)\*\s*\(.*?\)\s*:\s*
匹配部分应替换为;
。
对于开头部分,正则表达式应为:
^\*\s*\(.*?\)\s*:\s*
应该用空字符串替换。