如何将这些数据与正则表达式匹配?


Fica outorgada, em nome da PREFEITURA MUNICIPAL DE
JUQUIÁ, CNPJ n. 46.585.964/0001-40, a autorização administrativa para interferência(s) em recursos hídricos superficiais, para
fins de rodoviário no município de JUQUIÁ, conforme abaixo
identificado:
- Travessia Aérea 01 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 54,00" - Longitude o 47° 38'
54,10" - Prazo 30 anos.
- Travessia Aérea 02 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 58,00" - Longitude o 47° 38'
52,20" - Prazo 30 anos.
- Travessia Aérea 03 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 58,00" - Longitude o 47° 38'
52,00" - Prazo 30 anos.
- Travessia Aérea 04 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 59,00" - Longitude o 47° 38'
51,70" - Prazo 30 anos.
- Travessia Aérea 05 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 59,40" - Longitude o 47° 38'
51,50" - Prazo 30 anos.
- Travessia Aérea 06 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 59,90" - Longitude o 47° 38'
51,30" - Prazo 30 anos. Processo DAEE 9502113 - Extrato de
Portaria 4063/19.

Second example:
Fica outorgada, em nome do DEPARTAMENTO DE ESTRADAS DE RODAGEM - DER, CNPJ n. 43.052.497/0002-85, a autorização administrativa para interferência(s) em recursos hídricos
superficiais, para fins de rodoviário no município de COTIA,
conforme abaixo identificado:
- Travessia Aérea 01 (TR-05)Estaca 248+11,50 BSTM de Ø
3,00 m - Córrego Foges (Córrego Caucaia) Km 50,491 - Coord.
Geográficas Latitude S 23° 38' 33,97" - Longitude o 47° 03'
28,67" - Prazo 30 anos.
- Travessia Aérea 02 (TR-06)Est. 275+13,70 3 Linhas de
BTTC de Ø 1,50 m
- Ribeirão da Vargem Km 51,124 - Coord. Geográficas
Latitude S 23° 38' 49,97" - Longitude o 47° 03' 32,20" - Prazo
30 anos.
- Travessia Aérea 03 (TR-07)Est. 290+11,15 BSTC de Ø
1,20 m - Afluente do Ribeirão da Vargem Km 51,420 - Coord.
Geográficas Latitude S 23° 38' 54,45" - Longitude o 47° 03'
41,39" - Prazo 30 anos.
- Travessia Aérea 04 (TR-08) Est. 307+11,00 2 Linhas de
BDTC de Ø 1,20 m
- Afluente do Ribeirão da Vargem Km 51,770 - Coord.
Geográficas Latitude S 23° 38' 57,81" - Longitude o 47° 03'
52,83" - Prazo 30 anos.
- Travessia Aérea 05 (TR-09) Est. 372+4,50 BSCC de 3,00 m
x 3,00 m - Afluente do Ribeirão da Vargem Km 53,020 - Coord.
Geográficas Latitude S 23° 39' 18,71" - Longitude o 47° 04'
34,24" - Prazo 30 anos. Processo DAEE 9822402 - Extrato de
Portaria 4068/19.

我正在尝试匹配每个"主题"开头的数据。它应该是:

(match1) - (match2) - Coord.(...其余的(。

其中match1是"Travessia Aérea 01",match2是"Afluente do Rio Juquiá"。

我正在尝试与表达式匹配:

- ? ?((([A-z-áàâãéèêíïóôõúç]|d+)+ ? ? ?){1,10}) - ((([A-z-áàâãéèêíïóôõúç]|d+)+ ? ? ?){1,10}) - Coord.

但它匹配的比我想要的要多,因为匹配不会以"- 坐标"停止。

使用re.split('s*-s+')获取所需的字段。

import re
with open('f0.txt', 'r', encoding='utf-8') as f:
for line in f:
if line.startswith('-'):
_, Aérea, Afluente, _ = re.split(r's*-s+', line)
print(Aérea, Afluente)

指纹:

Travessia Aérea 01 Afluente do Rio Juquiá
Travessia Aérea 02 Afluente do Rio Juquiá
Travessia Aérea 03 Afluente do Rio Juquiá
Travessia Aérea 04 Afluente do Rio Juquiá
Travessia Aérea 05 Afluente do Rio Juquiá
Travessia Aérea 06 Afluente do Rio Juquiá

您尝试的模式有很多操作可选部件,这使得它效率低下。

您可以使用 2 个捕获组,一个否定的字符类匹配不-或没有可选部件或非贪婪量词的换行符。

如果文本由空格连字符空格分隔,则可以在字面上匹配这些连字符。

请注意,s还匹配换行符,并且在字符类中使用A-z匹配的超过[A-Za-z]

^- ([^rn-]*) - ([^rn-]*) - Coord.

解释

  • ^-字符串、-和空格的开头
  • ([^rn-]*)捕获组 1匹配 0+ 次,不是换行符或-
  • -字面意思匹配
  • ([^rn-]*)捕获组 2匹配 0+ 次不是换行符或-
  • -字面意思匹配
  • Coord.匹配坐标后跟文字点

正则表达式演示

我猜也许这个表达式

^-s*([^rn]*?)s*-s*([^rn]*?)s*-s*Coord.

这里可能需要。

测试

import re
expression = r"^-s*([^rn]*?)s*-s*([^rn]*?)s*-s*Coord."
string = """
Fica outorgada, em nome da PREFEITURA MUNICIPAL DE
JUQUIÁ, CNPJ n. 46.585.964/0001-40, a autorização administrativa para interferência(s) em recursos hídricos superficiais, para
fins de rodoviário no município de JUQUIÁ, conforme abaixo
identificado:
- Travessia Aérea 01 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 54,00" - Longitude o 47° 38'
54,10" - Prazo 30 anos.
- Travessia Aérea 02 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 58,00" - Longitude o 47° 38'
52,20" - Prazo 30 anos.
- Travessia Aérea 03 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 58,00" - Longitude o 47° 38'
52,00" - Prazo 30 anos.
- Travessia Aérea 04 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 59,00" - Longitude o 47° 38'
51,70" - Prazo 30 anos.
- Travessia Aérea 05 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 59,40" - Longitude o 47° 38'
51,50" - Prazo 30 anos.
- Travessia Aérea 06 - Afluente do Rio Juquiá - Coord.
Geográficas Latitude S 24° 19' 59,90" - Longitude o 47° 38'
51,30" - Prazo 30 anos. Processo DAEE 9502113 - Extrato de
Portaria 4063/19.
"""
print(dict(re.findall(expression, string, re.M)))
print(re.findall(expression, string, re.M))

输出

{'Travessia Aérea 01': 'Afluente do Rio Juquiá', 'Travessia Aérea 02': 'Afluente do Rio Juquiá', 'Travessia Aérea 03': 'Afluente do Rio Juquiá', 'Travessia Aérea 04': 'Afluente do Rio Juquiá', 'Travessia Aérea 05': 'Afluente do Rio Juquiá', 'Travessia Aérea 06': 'Afluente do Rio Juquiá'}

[('Travessia Aérea 01', 'Afluente do Rio Juquiá'), ('Travessia Aérea 02', 'Afluente do Rio Juquiá'), ('Travessia Aérea 03', 'Afluente do Rio Juquiá'), ('Travessia Aérea 04', 'Afluente do Rio Juquiá'), ('Travessia Aérea 05', 'Afluente do Rio Juquiá'), ('Travessia Aérea 06', 'Afluente do Rio Juquiá')]

如果您想探索/简化/修改表达式,它已经 在右上角的面板上解释 regex101.com。如果您愿意,您可以 也可以在这个看 链接,它将如何匹配 针对某些示例输入。


最新更新