我有一个要求,根据文件名,我需要调用不同的方法 文件名示例如下
在这里我想在遇到datepattern后删除所有字符 所以输出应该像这样:
请建议使用正则表达式进行适当的字符串操作
答案 0 :(得分:1)
要过滤所有数字,可以使用:yourText.replaceAll("[0-9]","")
。
但是,如果要删除.txt,请使用:yourTextAfterReplacingAll.split("\\.")
您想要的文本在yourTextAfterSplit[0]
答案 1 :(得分:0)
答案 2 :(得分:0)
验证日期至少从表面上看似乎是个好约会,可能有些过分考虑。如果您不关心10664964之类的无效日期,则可以简化此正则表达式。
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DatePrefix {
// no digits before date; year must be between 2000 and 9999
// month from 01 to 12, day from 01 to 31
private static Pattern beforeDate = Pattern.compile(
"([^0-9]+)_[2-9]\\d{3}(?:0[1-9]|1[0-2])(?:0[1-9]|[1-2]\\d|3[01])");
public static void main(String[] args) {
for (String filename : args) {
getPrefixBeforeDate(filename)
.ifPresentOrElse(
prefix -> System.out.format("Found %s%n", prefix),
() -> System.out.format("Bad date: %s%n", filename));
}
}
public static Optional<String> getPrefixBeforeDate(String filename) {
Matcher matcher = beforeDate.matcher(filename);
if (matcher.find()) {
return Optional.of(matcher.group(1));
}
return Optional.empty();
}
}
通过以下方式调用:
java DatePrefix Pq_xy_20180229.txt Abc_def_ghi_20380323_foo_1200.xml \ Hey_its_20182395.gif Foo_bar.txt
它打印:
Found Pq_xy Found Abc_def_ghi Bad date: Hey_its_20182395.gif Bad date: Foo_bar.txt
如果您不在乎日期是否全部有效,则可以使用以下模式:
private static Pattern beforeDate = Pattern.compile("([^0-9]+)_\\d{8}");
答案 3 :(得分:0)