[英]regular expression that starts with an underscore but not contains any underscore
我试图从最后一个下划线获取文件的名称,直到结束。
例如, ABC_AA.xml
应为ABC
, ABC_AASD_AD_AA.xml
应为ABC_AASD_AD
我正在考虑使用非贪婪的exlusive ^
符号。 我试过这个:
String nameToSearch = testName.replaceAll("_(^(_).)+\\.xml$", "");
如何使用简单的子串而不是正则表达式
String nameToSearch = testName.substring(0, testName.lastIndexOf('_'));
或者如果没有_
你可以使用
String noSuffix = testName.substring(0, testName.lastIndexOf('.'));//remove ".xml"
String nameToSearch = noSuffix.substring(0, testName.lastIndexOf('_'));
但如果你真的想使用正则表达式,那么你可以试试
testName.replaceAll("_[^_]*[.]xml$", "");
它将匹配(并删除) _
具有零个或多个非_
字符[^_]*
并以.xml
结尾。
如果没有_
你可以使用_[^_]*
可选
testName.replaceAll("(_[^_]*)?[.]xml$", "");
简单。
使用组和反向引用,如下所示:
String input = "ABC_AASD_AD_AA.xml";
// | using replaceAll to pass regex
// | | group 1: one or more characters, greedy
// | | | underscore
// | | || one or more characters, reluctant
// | | || | escaped dot and extension
// | | || | | back-reference to group 1
System.out.println(input.replaceAll("(.+)_.+?\\.xml", "$1"));
产量
ABC_AASD_AD
注意
任何不符合Pattern
输入都将被退回。
我相信这个正则表达式应该有效:
String repl = str.replaceFirst("_[^_]+$", "");
^
字符可以用作“独占”,即排除某些字符, 仅作为[]
内字符类的第一个字符。 [^_]
匹配任何不是下划线的字符。 在方括号之外,它表示“源字符串的开头”。
所以你很亲密。 尝试这个:
String nameToSearch = testName.replaceAll("_[^_]+\\.xml$", "");
或者,如果要处理以下划线结尾的文件名( ABC_.XML
更改为ABC
),并在该情况下删除下划线,请将+
(1或更多)更改为*
(0或更多)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.