我想要一个正则表达式,它可以找到恰好两个a
(不是 3、4、5、。)需要模式的单词?不必排成一行。
["taat","weagda","aa"]
可以,但不是这个["a","eta","aaa","aata","ssdfaasdfa"]
。
user1870343
问问题
124 次
4 回答
4
这将起作用:
^[^a]*a[^a]*a[^a]*$
更通用的版本,您可以将 2 替换为任意数字:
^(?:[^a]*a){2}[^a]*$
上面的 2 个正则表达式利用a
了单个字符这一事实,因此我们可以确保所有其他字符都不是a
. 第二个使用重复符号。
更通用的版本“不超过 n 个非重叠子字符串”(启用 DOTALL 模式):
^(?!(?:.*sstr){3})(?:.*sstr){2}.*$
wheresstr
是一个正则表达式转义的子字符串,并且负前瞻中的重复次数必须比我们要匹配的次数多 1。
这个有点棘手,我使用负前瞻来确保字符串不包含 substring 的 n + 1 个非重叠实例sstr
,然后尝试准确找到 n 个非重叠实例。
于 2012-12-27T07:38:24.723 回答
0
您也可以将Counter
对象用于此任务。
In [1]: from collections import Counter
In [2]: words = ["taat","weagda","aa", "a","eta","aaa","aata","ssdfaasdfa"]
In [3]: [word for word in words if Counter(word)['a'] == 2]
Out[3]: ['taat', 'weagda', 'aa']
于 2012-12-27T11:38:03.100 回答
0
在这种情况下,我认为,您可以使用字符串来查找,只需使用 for 循环。
mylist = ["taat","weagda","aa","eta","aaa","aata","ssdfaasdfa"];
resultList = [];
for x in mylist:
count = 0;
for c in x:
if c == 'a':
count = count +1;
if count == 2:
resultList.append(x);
print(resultList);
于 2012-12-27T07:43:19.190 回答
0
用两个正则表达式来做,而不是试图把它全部塞进一个。
检查您的单词a[^a]*a
是否匹配a.*a.*a
于 2012-12-27T07:45:40.803 回答