Java Regular Expression重复组捕获

时间:2017-09-12 13:57:30

标签: java regex

我在这里捕获重复的群体时遇到问题,有人可以帮忙吗?

字符串:Ushinski K. D.(Konstantin Dmitrievich)

我正在使用的正则表达式是:

(?i)(.*)((?:[a-z]{1,2}\.\s)+)\(.*

但它正在将"Ushinski K. "视为第1组,将"D. "视为第2组。但我的目标是将"Ushinski "视为第1组,将"K. D. "视为第2组。非常感谢帮助。

regex demo

2 个答案:

答案 0 :(得分:0)

如果您的“名字”没有空格:

(?i)(\S*)\s*((?:[a-z]{1,2}\.\s)+)\(.*

我建议您将此网站用于正则表达式:https://regex101.com/

修改:如果它有空格但没有'。':

(?i)([^\.]+)\s+((?:[a-z]{1,2}\.\s)+)\(.*

答案 1 :(得分:0)

您必须使用(.*?),或者您可以使用Word Boundaries (\b.*\b)代替(.*)查看此帖What is the difference between the regex (.*?) and (.*)?

(?i)(.*?)\s((?:[a-z]{1,2}\.\s)+)\(.*

(?i)(\b.*\b)\s((?:[a-z]{1,2}\.\s)+)\(.*

regex demo 1

regex demo 2