我正在尝试在Python中使用正则表达式来查找和打印来自多行搜索的所有匹配行。我正在搜索的文本可能具有以下示例结构:
AAA级
ABC1
ABC2
ABC3
AAA级
ABC1
ABC2
ABC3
ABC4
美国广播公司
AAA级
ABC1
AAA级
我想从中检索至少发生一次并以 AAA* 开头的 **ABC 。 ****
问题是,尽管小组正在抓住我想要的:
match = <_sre.SRE_Match object; span=(19, 38), match='AAA\nABC2\nABC3\nABC4\n'>
…我只能访问该组的最后一个匹配项:
match groups = ('AAA\n', 'ABC4\n')
下面是用于此问题的示例代码。
#! python
import sys
import re
import os
string = "AAA\nABC1\nABC2\nABC3\nAAA\nABC1\nABC2\nABC3\nABC4\nABC\nAAA\nABC1\nAAA\n"
print(string)
p_MATCHES = []
p_MATCHES.append( (re.compile('(AAA\n)(ABC[0-9]\n){1,}')) ) #
matches = re.finditer(p_MATCHES[0],string)
for match in matches:
strout = ''
gr_iter=0
print("match = "+str(match))
print("match groups = "+str(match.groups()))
for group in match.groups():
gr_iter+=1
sys.stdout.write("TEST GROUP:"+str(gr_iter)+"\t"+group) # test output
if group is not None:
if group != '':
strout+= '"'+group.replace("\n","",1)+'"'+'\n'
sys.stdout.write("\nCOMPLETE RESULT:\n"+strout+"====\n")
这是您的正则表达式:
(AAA\r\n)(ABC[0-9]\r\n){1,}
Debuggex演示
您的目标是捕获紧随其后的 所有
。如您在此Debuggex演示中所见,所有s确实都被匹配了(它们以黄色突出显示)。但是,由于只有“正在重复的内容”部分ABC#``AAA``ABC#
ABC[0-9]\r\n
被捕获(在括号内)及其量词,
{1,}
未被捕获,因此将导致 除最后一场 比赛 之外的 所有比赛 都 被丢弃。要获取它们,还必须捕获量词:
AAA\r\n((?:ABC[0-9]\r\n){1,})
Debuggex演示
我已将“正在重复的内容”部分(ABC[0-9]\r\n
)放入一个非捕获组。(AAA
由于您似乎不需要它,我也已停止捕获它。)
捕获的文本可以在换行符上进行拆分,并根据需要提供所有内容。
(请注意,\n
它本身在Debuggex中不起作用。它需要\r\n
。)
这是一种解决方法。没有太多的正则表达式功能可以通过重复捕获(哪些捕获?)进行迭代。一种更普通的方法是遍历并 处理
找到的每个匹配项。这是来自Java的示例:
import java.util.regex.*;
public class RepeatingCaptureGroupsDemo {
public static void main(String[] args) {
String input = "I have a cat, but I like my dog better.";
Pattern p = Pattern.compile("(mouse|cat|dog|wolf|bear|human)");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group());
}
}
}
输出:
cat
dog
(摘自 http://ocpsoft.org/opensource/guide-to-regular-expressions-in-java-
part-1/
,大约减少了1/4)
请考虑将“堆栈溢出正则表达式”
FAQ标记为书签,以备将来参考。这个答案中的链接来自它。
问题内容: 我有一个django(1.6.x)项目,可以在开发服务器上正常运行,但是在Ubuntu 12.04.3上的Apache2(2.2.22.1)和mod_wsgi(3.3-4)下运行失败,并显示错误消息 配置不当:所包含的urlconf erp.urls中没有任何模式 我不明白为什么它可以与开发服务器一起使用,但不能与Apache2 / mod_wsgi一起使用,我发现很难跟踪错误的出处。
问题内容: 在PHP中可以包含脚本目录吗? 即代替: 是否有类似的东西: 似乎找不到找到针对特定类的大约10个子类的集合的好方法。 问题答案:
问题内容: 我的网站以前可以正常工作,但突然因错误而中断 配置不正确,位于/包含的urlconf resume.urls中没有任何模式 该项目的基础称为简历。在settings.py我已经设置 这是我的resume.urls,位于项目根目录中。 我有一个名为urls的文件夹和一个文件ajax.py。(我还在同一文件夹中创建了一个空白的init .py,以便可以识别url。)这是ajax.py。 有
有人知道如何编写正则表达式模式吗? 假设我有一组字母,比如 还有一个单词Alabama,我希望preg_match返回true,因为它包含两次字母a和B。但是单词Ab应该返回false,因为这个单词中没有两个a。 有什么想法吗? 编辑:我尝试的唯一模式是[a,b,a],但它会在每个包含其中一个字母的单词上返回true,并且不会检查是否出现多个字母
问题内容: 我正在寻找一种有效的方法来从javascript数组中删除所有元素(如果它们存在于另一个数组中)。 我想对myArray进行操作以使其保持这种状态: 使用jQuery,我使用和,效果很好: 有没有一种纯Javascript方式无需循环和拼接的方法? 问题答案: 使用方法: 小改进,因为对浏览器的支持增加了: 使用arrow functions:下一个适应:
我正在寻找一种有效的方法,从一个javascript数组中删除所有元素,如果它们存在于另一个数组中。 我想对myArray进行操作,使其保持这种状态: 使用jQuery,我使用和,效果很好: 有没有一种纯javascript的方法可以做到这一点,而不需要循环和拼接?