所以我想解析包含两个关键组件的字符串。一个告诉我时间选择,另一个是位置。使用正则表达式解析文本
以下是文字看起来像
KB_H9Oct4GFP_20130305_p00{iiii}t00000{ttt}z001c02.tif
的{iiii}
的位置和{ttt}
是时机选择。
我需要的{ttt}
和{iiii}
分离出来,所以我可以得到一个完整的文件名:例如,位置1和时间片1 = KB_H9Oct4GFP_20130305_p0000001t000000001z001c02.tif
到目前为止,这里是怎么了它们解析:
int startTimeSlice = 1;
int startTile = 1;
String regexTime = "([^{]*)\\{([t]+)\\}(.*)";
Pattern patternTime = Pattern.compile(regexTime);
Matcher matcherTime = patternTime.matcher(filePattern);
if (!matcherTime.find() || matcherTime.groupCount() != 3)
{
throw new IllegalArgumentException("Incorect filePattern: " + filePattern);
}
String timePrefix = matcherTime.group(1);
int tCount = matcherTime.group(2).length();
String timeSuffix = matcherTime.group(3);
String timeMatcher = timePrefix + "%0" + tCount + "d" + timeSuffix;
String timeFileName = String.format(timeMatcher, startTimeSlice);
String regex = "([^{]*)\\{([i]+)\\}(.*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(timeFileName);
if (!matcher.find() || matcher.groupCount() != 3)
{
throw new IllegalArgumentException("Incorect filePattern: " + filePattern);
}
String prefix = matcher.group(1);
int iCount = matcher.group(2).length();
String suffix = matcher.group(3);
String nameMatcher = prefix + "%0" + iCount + "d" + suffix;
String fileName = String.format(nameMatcher, startTile);
不幸的是我的代码不起作用,它检查第二个matcher
是否在timeFileName
中找到任何东西时失败。
第一正则表达式检查后得到以下作为timeFileName
:000000001z001c02.tif
,因此它被切断开始药剂包括{iiii}
可惜我不能假设该组先行({iiii}
或{ttt}
),所以我我试图设计一个解决方案,首先处理{ttt}
,然后处理{iiii}
。
而且,这里是有效的文本的另一个例子,我也试图解析:F_{iii}_{ttt}.tif
他们都有拖尾“T”和“Z”字来区分哪些是应该的顺序变化?你的最后一个例子看起来像't'和'z'在某些情况下可能不存在。 –
确实难以保证z和t与最后一个例子'F_ {iii} _ {ttt} .tif' – Jameshobbs
是否是正则表达式的一个要求? – Solace