gpt4 book ai didi

java - 使用正则表达式解析文本

转载 作者:行者123 更新时间:2023-12-01 13:19:12 24 4
gpt4 key购买 nike

所以我试图解析一个包含两个关键组件的字符串。一个告诉我时间选项,另一个是位置。

这是文本的样子

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

最佳答案

遵循的步骤:

  • 在文件名中查找字符串 {ttt...}
  • 根据字符串中“t”的数量形成数字格式
  • 在文件名中查找字符串 {iiii...}
  • 根据字符串中“i”的数量形成数字格式
  • 使用 String.replace() 方法替换时间和位置

这是代码:

String filePattern = "KB_H9Oct4GFP_20130305_p00{iiii}t00000{ttt}z001c02.tif";
int startTimeSlice = 1;
int startTile = 1;

Pattern patternTime = Pattern.compile("(\\{[t]*\\})");
Matcher matcherTime = patternTime.matcher(filePattern);

if (matcherTime.find()) {
String timePattern = matcherTime.group(0);// {ttt}

NumberFormat timingFormat = new DecimalFormat(timePattern.replaceAll("t", "0")
.substring(1, timePattern.length() - 1));// 000

Pattern patternPosition = Pattern.compile("(\\{[i]*\\})");
Matcher matcherPosition = patternPosition.matcher(filePattern);

if (matcherPosition.find()) {
String positionPattern = matcherPosition.group(0);// {iiii}

NumberFormat positionFormat = new DecimalFormat(positionPattern
.replaceAll("i", "0").substring(1, positionPattern.length() - 1));// 0000

System.out.println(filePattern.replace(timePattern,
timingFormat.format(startTimeSlice)).replace(positionPattern,
positionFormat.format(startTile)));
}
}

关于java - 使用正则表达式解析文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com