我想从以下字符串中提取用户名和日期:
Syed Arafath on Jan 7, 2015
Capt.KSD on Dec 30, 2014
chakradharalasakani on Dec 29, 2014
mitesh0123 on Dec 18, 2014
Aparajita61@yahoo.in on Dec 3, 2014
123chetan on Oct 28, 2014
我想要输出如下:
Syed Arafath
Capt.KSD
chakradharalasakani
mitesh0123
Aparjita61@yahoo.co.in
Jan 7,2015
Dec 30, 2014
Dec 29,2014
Dec 18,2014
Dec 3, 2014
Oct 28, 2014
总而言之,我想将字符串“Syed Arafath于2015年1月7日”拆分为2个字符串,一个包含用户名,另一个包含日期。
答案 0 :(得分:4)
在\\s+on\\s+
上进行拆分,你应该得到你想要的东西
参见演示。
https://regex101.com/r/tX2bH4/29
编辑:
使用\\s+on\\s+(?!.*\bon\b)
https://regex101.com/r/tX2bH4/30
如果您也关心Syed on Arafath
。前瞻确保在最后on
上进行拆分。
答案 1 :(得分:1)
根据以下正则表达式分割您的输入,
"\\s+on\\s+(?=\\S+\\s+\\d{1,2},)"
代码:
String txt = "Syed on Arafath on Jan 7, 2015";
String[] parts = txt.split("\\s+on\\s+(?=\\S+\\s+\\d{1,2},)");
System.out.println(Arrays.toString(parts));
输出:
[Syed on Arafath, Jan 7, 2015]
答案 2 :(得分:0)
import java.util.regex.*;
Pattern p = Pattern.compile("(.*) on (.*)");
Matcher m = p.matches(input);
if( m.matches() ) {
String username = m.group(1);
String date = m.group(2);
} else {
throw new Exception("Did not match expected pattern");
}
答案 3 :(得分:0)
使用直接正则表达式更适合拆分:
Matcher m = Pattern.compile("(.*) on .*").matcher(input);
m.matches();
System.out.println(m.group(1));
*
量词的贪婪质量保证名称中的任何on
都会被它抓取,只有最后 on
的出现将与on
字面值相匹配。
答案 4 :(得分:0)
作为拆分的替代方法,您可以使用replaceAll
String name = s.replaceAll("(.*) on .*", "$1");
String date = s.replaceAll(".*(\\w{3} \\d{1,2}, \\d{4}).*", "$1");