2017-02-02 39 views
1

我想匹配的模式是长度为n的序列,其中n在序列之前正好。正则表达式匹配n次,其中n不固定

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

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

我知道a{1}a{2}会匹配“a”一次或两次。但如何匹配其中n不固定的a{n}

是否可以使用正则表达式来进行这种匹配?

+0

您正在使用什么语言/工具? –

+3

您必须根据第一个字符动态生成正则表达式。正则表达式不能做到这一点。 – 4castle

+0

@TimBiegeleisen任何语言。如果您在Perl,Python,Java或Javascript中有解决方案,那将会很有帮助。只是想有一个大概的想法。 – zhanxw

回答

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 
+0

谢谢。但我的问题比这更复杂。 – zhanxw

+0

@zhanxw \t现在怎么样? – MYGz

+0

在我的情况下,a是一行。 '一个= “1aaaaaa2bbbbbbbbbbb3cccccccccc4ddddddddddd”'。数字的位置不固定。感谢您的代码,但。 – zhanxw

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()); 
     } 
    } 

}

+0

谢谢。但是该数字可能不是第一个字符,并且可能有不同的长度(例如1a,2aa) 实际上,输入字符串可能比我在问题中陈述的更复杂,例如, input =“1a..2aa ..... 1aaa ...”。我想匹配“1a”,“2aa”和“1a”。 这就是为什么我正在寻找一个可以匹配所有人的正则表达式。 – zhanxw

相关问题