正则表达式匹配n次不固定的n次

时间:2017-02-02 05:16:16

标签: regex

我想要匹配的模式是一个长度为n的序列,其中n就在序列之前。

例如,当输入为“1aaaaa”时,我想匹配单个字符“a”,因为第一个数字指定只匹配1个字符。

类似,当输入为“2aaaaa”时,我想匹配前两个字符“aa”,而不是其余字符,因为数字2指定将匹配两个字符。

我理解a{1}a{2}将匹配“a”一两次。但是如何匹配a{n},其中n未修复?

是否可以使用正则表达式进行此类匹配?

2 个答案:

答案 0 :(得分:1)

这适用于重复数字。

import re

a="1aaa2bbbbb1cccccccc4dddddddddddd"

for b in re.findall(r'\d[a-z]+', a):
    print b[int(b[0])+1:int(b[0])+1+int(b[0])]

输出:

a
bb
c
dddd

答案 1 :(得分:0)

虽然我已经用Java完成了,但它可以帮助你进入你的程序。

您可以在此处从给定的输入字符串中选择第一个字母作为子字符串,并在正则表达式中使用它来相应地匹配字符串。

public class DynamicRegex {

    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);

        System.out.println("Enter a string: ");
        String str = scan.nextLine();

        String testStr = str.substring(0, 1);   //Get the first character from the string using sub-string.

        String pattern = "a{"+ testStr +"}";    //Use the sub-string in your regex as length of the string to match.

        Pattern p = Pattern.compile(pattern);

        Matcher m = p.matcher(str);

        if(m.find()){
            System.out.println(m.group()); 
        }
    }

}