在文本块中获取相同的正则表达式组

getting same regex groups inside a block of text

我试图编写一个模式,让每个 CPNJ 组都包含在这个文本块中,但条件是,需要以 executados: 开头并以 CNPJ 组结束。但是,我的模式总是在最后一组,我不知道我应该怎么做才能成功。

答案不成立!

模式:(?:executados\:)[\p{L}\s\D\d]+CNPJ\W+(?P<cnpj>\d+\.\d+\.\d+\/\d+-\d+)

要测试的字符串:

Dados dos executados:
1. FOO TEST STRING LTDA., CNPJ: 88.888.888/8888-88,
2. ANOTHER TEST STRING LTDA LTDA LTDA - ME, CNPJ: 99.999.999/9999-99,
3. FOO TEST STRING LTDA., CPF: 999.999.999-99,
4. FOO TEST STRING LTDA., CPF: 999.999.999-99.
Como medida de economia e celeridade processuais, atribuo a

我想获取值{'cnpj': ['88.888.888/8888-88', '99.999.999/9999-99']},这种方式只获取最后一个。

您可以将 PyPi 正则表达式模块与正则表达式一起使用

(?s)(?<=executados:.*?)CNPJ\W+(\d+\.\d+\.\d+/\d+-\d+)

参见regex demo

这里是 Python demo:

import regex
text = """Dados dos executados:
1. FOO TEST STRING LTDA., CNPJ: 99.999.999/9999-99,
2. ANOTHER TEST STRING LTDA LTDA LTDA - ME, CNPJ: 99.999.999/9999-99,
3. FOO TEST STRING LTDA., CPF: 999.999.999-99,
4. FOO TEST STRING LTDA., CPF: 999.999.999-99.
Como medida de economia e celeridade processuais, atribuo a"""
print( regex.findall(r'(?s)(?<=executados:.*?)CNPJ\W+(\d+\.\d+\.\d+/\d+-\d+)', text) )

屈服

['99.999.999/9999-99', '99.999.999/9999-99']

正则表达式匹配

  • (?s) - regex.DOTALL, 启用 . 匹配换行字符
  • (?<=executados:.*?) - 在当前位置之前,必须有 executados: 然后是任何零个或多个字符
  • CNPJ - 固定字符串
  • \W+ - 一个或多个非单词字符
  • (\d+\.\d+\.\d+/\d+-\d+) - regex.findall 的 return 值,第 1 组:一个或多个数字和一个 . 两次,然后是一个或多个数字,/, one or more digits, -` 和一位或多位数字。