我正在处理一个tsv文件。我在一个条目中有一堆网址,我正在寻找一个具有' .ab。'的特定网址。关键字在其中。
我希望输出为http://this/is/anexamplewith.ab.jpg
这就是我正在使用的:' ^ http://.* [.AB.jpg]'但是它给了我整个字符串。 我可以使用什么RegEx?
谢谢!
答案 0 :(得分:1)
请注意,^http://.*[.AB.jpg]
匹配字符串开头的http://
,.*
匹配除换行符之外的所有字符(行的末尾),以查找最后一次出现的以下字符 - .
,A
,B
,.
,j
,p
,g
。最后你有g
- 因此匹配整个字符串。
您可以使用
http:\/\/(?:(?!http:\/\/).)*\.ab\.(?:(?!http:\/\/).)*(?=$|http)
请参阅demo
正则表达式匹配:
http:\/\/
- 匹配http://
(?:(?!http:\/\/).)*
- 匹配任何未启动子字符串http://
的符号(从而确保第一个http://
和.ab.
之间的最短窗口)\.ab\.
- 文字.ab.
(?:(?!http:\/\/).)*
- 见上文(?=$|http)
- 一个前瞻,告诉引擎停在字符串末尾($
)或http://
前面。Java实现:
String str = "http://this/is/anexample.jpg,http://this/is/anexample.jpg,http://this/is/anexample.jpg,http://this/is/anexample.jpg,http://this/is/anexamplewith.AB.jpg";
Pattern ptrn = Pattern.compile("(?i)http://(?:(?!http://).)*\\.ab\\.(?:(?!http://).)*(?=$|http)");
Matcher matcher = ptrn.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
http://this/is/anexamplewith.AB.jpg
<强> REPLACEMENT 强>
要替换该匹配,您只需使用replaceAll
:
str = str.replaceAll("(?i)http://(?:(?!http://).)*\\.ab\\.(?:(?!http://).)*(?=$|http)", "");