考虑以下示例:
Regex: (.\*?),(.\*)
String: 10,20
Result: Group1: 10; Group2: 20
类似地,
Regex: ???
String: 10{1,1 %d},10{2,1 %d}
Expected result: Group1: 10{1,1 %d}; Group2: 10{2,1 %d}
在第二个示例中,字符串多次包含“,”,这将导致意外输出。在这种情况下,我们如何才能达到预期的结果?
答案 0 :(得分:0)
因此,除非您将逗号括在一对匹配的定界符(例如“ {} [] <> ||””)中,否则听起来好像要用逗号分隔字符串。目前,我假设此文件将是常规文件,并且没有嵌套标记。
因此,要找到所有这些组,我们希望将匹配项视为除逗号之外的任何字符串, AND 如果您有周围的标记,则部分匹配项是有效的。
String pattern = "[^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)[^,]*?";
Pattern p = Pattern.compile(pattern);
此模式应为您完成。它会匹配任何以逗号开头的字符串,并且在“ {} [] <> ||”中具有某种包装器并且可能以一些文本结尾。您甚至可以将pattern
包装在一组中并重复进行。像这样:
String pattern = "([^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)[^,]*?)+"; // Notice the parens on the outside and the '+'
Pattern p = Pattern.compile(pattern);
如果括号是可选的,请考虑:
String pattern = "[^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)?[^,]*?"; // Notice the added '?'
Pattern p = Pattern.compile(pattern);
我完全忘记了用于搜索字符串以获取多个结果的java实现是什么,但这在python中使用search
,match
和finditer
方法以及模式仍可与Java一起使用。