提问人:biscuitduke 提问时间:7/14/2020 更新时间:7/14/2020 访问量:284
使用正则表达式在两个字符之一之前提取子字符串
Extracting a substring before one of two characters using regex
问:
所以我有一个初始文件集:
file1.txt
file2.txt
当我对这些文件进行更改并保存它们时,我会在它们后面附加一个时间戳,这样它们就会变成:
fileN_DD-Mon-YYYY_HHMMSS.txt
但是,如果我要进行任何额外的保存,时间戳将开始堆叠:
fileN_DD-Mon-YYYY_HHMMSS_DD-Mon-YYYY_HHMMSS.txt
我需要一种方法来获取在第一次出现“.”或“_”之前出现的子字符串,以获取它们前面的字符串(即实际文件名(“fileN”))。
我已经走到了这一步
int lastDot = fileName.getName().lastIndexOf('.');
String renamed = fileName.getName().substring(0,lastDot) + getDateTime() + fileName.getName().substring(lastDot);
我尝试使用Scanner::useDelimiter使用正则表达式获取“.”或“_”的第一次出现,但没有运气。
String renamed = savedFileName(fileName)
public static String savedFileName(String fileName) {
final String TXT = ".txt";
Scanner s = new Scanner(fileName);
s.useDelimiter(<regex>);
String trueFileName = s.next();
s.close();
return trueFileName + getDateTime() + TXT;
对于正则表达式,我已经尝试过,但这只返回最新的时间戳:"\\W"
_DD-Mon-YYYY_HHMMSS.txt
,但这又返回了这个怪物:".|_"
fileN.txt_DD-Mon-YYYY.txt_(more timestamps).txt.
答:
0赞
jdaz
7/14/2020
#1
你可以将 的方法与正则表达式模式一起使用:String
split
\.|_
String longFile = "fileN_DD-Mon-YYYY_HHMMSS.txt";
String shortFile = "file1.txt ";
String pattern = "\\.|_"; // need to escape backslash
System.out.println(longFile.split(pattern)[0]);
System.out.println(shortFile.split(pattern)[0]);
或者,等效地,正则表达式 。[._]
输出:
fileN
file1
评论