在文本块中获取相同的正则表达式组
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,
-` 和一位或多位数字。
我试图编写一个模式,让每个 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,
-` 和一位或多位数字。