【发布时间】:2014-02-03 19:17:49
【问题描述】:
我正在尝试找到一个采用以下数据的正则表达式模式:
static String testData = "0001,48;0451,0605\\,230001;0461,0606\\;230006;0431,0605230002";
并打印到以下组:
Group 1: 0001,48;
Group 2: 0451,0605\\,230001;
Group 3: 0461,0606\\;230006;
Group 4: 0431,0605230002;
我目前的模式在解析 '0605\,230001' 中出现的转义序列时效率不高。
static String testPattern = "([\\d]{4}" + "[,]{1}"+ "(?:[[a-zA-Z0-9][\\;][\\,][\\(][\\)][\\s]]*)"+ "[;]{1})" ;
上述模式仅在打印时有效:
Group 1: 0001,48;
Group 2: 0431,0605230001;
其余代码:
Pattern pattern=Pattern.compile(testPattern);
Matcher matcher = pattern.matcher(testData);
System.out.println("Test Matches: "+testData.matches(testPattern));
while(matcher.find())
{
for (int i = 1; i <= matcher.groupCount(); i++)
{
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
有没有办法让我们在模式中包含转义序列,并且在我们需要的时候也不转义它们?
【问题讨论】:
-
你为什么使用正则表达式来做到这一点?看起来你只是想分开;
-
如果@PeterMichealLacey-Bordeaux 正确,只需将所有“其他”分隔符替换为;
-
当有'/;'时会发生什么,即';'前面有一个转义字符,它是否足够聪明地检测到转义字符并在拆分时忽略它?
-
@Fardu 在这种情况下使用正则表达式进行拆分
-
我刚刚编辑了输入数据,因为可能会出现很多转义序列。