我想要匹配的模式是一个长度为n的序列,其中n就在序列之前。
例如,当输入为“1aaaaa”时,我想匹配单个字符“a”,因为第一个数字指定只匹配1个字符。
类似,当输入为“2aaaaa”时,我想匹配前两个字符“aa”,而不是其余字符,因为数字2指定将匹配两个字符。
我理解a{1}
和a{2}
将匹配“a”一两次。但是如何匹配a{n}
,其中n未修复?
是否可以使用正则表达式进行此类匹配?
答案 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());
}
}
}