Java正则表达式匹配两个相同的数字

时间:2018-08-30 17:10:34

标签: java regex

我想使用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中是否不可能匹配两个相同的数字?

3 个答案:

答案 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

RegEx Demo

等效的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

Java demo

.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)

此regEx [3, 4, 5] [5, 4, 3]

匹配这样的字符串:

^(.*)\/(\d+?)\/(\d+?)_(\d+?)\.jpg$

分为4部分。

查看示例结果:

enter image description here