我想使用RE来匹配文件路径,如下所示:
../90804/90804_0.jpg
../89246/89246_8.jpg
../89247/89247_14.jpg
当前,我使用以下代码进行匹配:
Pattern r = Pattern.compile("^(.*?)[/](\\d+?)[/](\\d+?)[_](\\d+?).jpg$");
Matcher m = r.matcher(file_path);
但是我发现这将是意外的匹配,例如:
../90804/89246_0.jpg
在RE中是否不可能匹配两个相同的数字?
答案 0 :(得分:3)
您可以将此正则表达式与捕获组和相同的反向引用一起使用:
//Get the container which holds the 4 divs and their buttons
containerDiv = browser.find_element_by_id('expedition_list')
//Get the divs which contain the buttons
containerDivs = containerDiv.find_elements_by_class_name('expedition_box')
//Iterate the containers
for val in containerDivs:
//Get the div elements of the container
childDivs = val.find_elements_by_tag_name('div')
//iterate these divs, looking for the one which contains a button
for val1 in childDivs
buttonDiv = val1.find_elements_by_tag_name('button')
//Check to see if we found a div with a button
if len(buttonDiv) > 0
for button in buttonDiv
//If the button text is what we are looking for, click it
if button.Text = 'whatever your button's text is'
button.Click
等效的Java正则表达式字符串为:
(\d+)/\1
详细信息:
final String regex = "(\\d+)/\\1";
:匹配1个以上的数字并将其捕获在#1组中(\d+)
:数学文字/
/
:使用后向引用#1,匹配与组#1相同的数字答案 1 :(得分:3)
您可以在此处使用\1
反向引用而不是第二个\2
:
\d+
请参见regex demo。请注意,如果您使用s.matches("(.*?)/(\\d+)/(\\2)_(\\d+)\\.jpg")
方法,则不需要matches
和^
锚点。
详细信息
$
-组1:除换行符以外的任何0+个字符,应尽可能少(.*?)
-斜杠/
-第2组:一个或多个数字(\\d+)
-斜杠/
-第3组:与第2组相同的值(\\2)
-下划线_
-第4组:一个或多个数字(\\d+)
-\\.jpg
。 .jpg
输出:
Pattern r = Pattern.compile("(.*?)/(\\d+)/(\\2)_(\\d+)\\.jpg");
Matcher m = r.matcher(file_path);
if (m.matches()) {
System.out.println("Match found");
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
System.out.println(m.group(4));
}
答案 2 :(得分:0)