繁体   English   中英

正则表达式匹配以字符结尾但不包含该字符的字符串

[英]Regex match string that end with character but exclusive of that character

我需要匹配电影的质量并订购它们。 该值可在标题中找到

防爆。 "The Wolf of Wall Street (2014) (HD, 1080p).mov"

我有一个符合质量的正则表达式:

"\\d\\d\\d[\\d]*p"

出于某种原因,我比较(compareTo)它们的订购价值:

防爆。

1080p
1080p
480p
480p
480p
720p
720p

480p列表高于720p。 我相信这是因为p(?)而发生的。 我想知道如何更改我的正则表达式以检查是否存在ap(因此标题中的年份不匹配,只有质量)但排除了匹配字符串中的p。

使用可以使用正则表达式"(\\\\d{3,4})p"Matcher.group(1)提取字符串中的数字,并将它们排序为数字,而不是字符串。 字符串按字典顺序进行比较。

你需要一个特殊的String比较器,首先按长度比较,然后按值进行比较:

Comparator<String> LENGTH_FIRST = (s1, s2) -> s1.length() == s2.length() 
                                      ? s1.compareTo(s2) 
                                      : (s1.length() - s2.length());

使用这样的比较器进

List<String> qualities = Arrays.asList("1080p", "480p", "720p");
Collections.sort(qualities, LENGTH_FIRST); // will re-order as [480p, 720p, 1080p]

我没有那么多使用Java,但也许你可以在正则表达式中使用一个组? 即:

"(\\d\\d\\d[\\d]*)p"

然后对组进行反向引用(括号内的内容)。 我知道你可以用perl正则表达式做到这一点

希望它有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM