Python 如何将这些数据与正则表达式匹配? Fica outorgada,位于普里菲图拉市 朱基奥,CNPJ n。46.585.964/0001-40,一项关于国际刑事法院的行政管辖权,第46.585.964/0001-40段 罗多维亚里奥的鱼翅没有朱基奥的市政标志,但符合阿拜索的要求 识别: -Travessia Aérea 01-漂浮在里约朱基亚-库德。 地理坐标纬度S 24°19'54,00“-经度o 47°38” 54,10“-Prazo 30 anos。 -Travessia Aérea 02-漂浮在里约朱基亚-库德。 地理纬度S 24°19'58,00“-经度o 47°38” 52,20“-Prazo 30 anos。 -Travessia Aérea 03-漂浮在里约朱基亚-库德。 地理纬度S 24°19'58,00“-经度o 47°38” 52,00“-Prazo 30 anos。 -Travessia Aérea 04-漂浮在里约朱基亚-库德。 地理纬度S 24°19'59,00“-经度o 47°38” 51,70“-Prazo 30 anos。 -Travessia Aérea 05-漂浮在里约朱基亚-库德。 地理纬度S 24°19'59,40“-经度o 47°38” 51,50“-Prazo 30 anos。 -Travessia Aérea 06-漂浮在里约朱基亚-库德河上。 地理纬度S 24°19'59,90“-经度o 47°38” 51,30“-Prazo 30 anos。进程DAEE 9502113-附加到de Portaria 4063/19。 第二个例子: 中国石油天然气股份有限公司董事会董事会。43.052.497/0002-85,一个行政管理机构,一个行政管理机构 浅层,没有科蒂亚市政, 确认abaixo标识: -Travessia Aérea 01(TR-05)Estaca 248+11,50 BSTM deØ 海拔3,00米-科雷戈·福格斯(科雷戈·高加索)50491公里-库尔德。 地理纬度S 23°38'33,97“-经度o 47°03” 28,67“-Prazo 30 anos。 -特拉维西亚Aérea 02(TR-06)东部。275+13,70 3林哈斯德 BTTC deØ1,50米 -里贝奥达瓦格姆51124公里-库德。Geográficas 纬度S 23°38'49,97“-经度o 47°03'32,20“-普拉佐 30个其他人。 -特拉维西亚Aérea 03(TR-07)东部。290+11,15英国夏令时 1,20米-Ribeirão da Vargem河上游51420公里-Coord。 地理纬度S 23°38'54,45“-经度o 47°03” 41,39“-Prazo 30 anos。 -特拉维西亚Aérea 04(TR-08)东部。307+11,00 2林哈斯德 BDTC deØ1,20 m -瓦格姆河上游,51770公里-库德。 地理纬度S 23°38'57,81“-经度o 47°03” 52,83“-Prazo 30 anos。 -美国东部特拉维西亚Aérea 05(TR-09)。372+4.50 BSCC de 3.00 m x 3,00 m-Ribeirão da Vargem河上游53020公里-Coord。 地理纬度S 23°39'18,71“-经度o 47°04” 34,24“-Prazo 30 anos。进程DAEE 9822402-附加到de Portaria 4068/19。

Python 如何将这些数据与正则表达式匹配? Fica outorgada,位于普里菲图拉市 朱基奥,CNPJ n。46.585.964/0001-40,一项关于国际刑事法院的行政管辖权,第46.585.964/0001-40段 罗多维亚里奥的鱼翅没有朱基奥的市政标志,但符合阿拜索的要求 识别: -Travessia Aérea 01-漂浮在里约朱基亚-库德。 地理坐标纬度S 24°19'54,00“-经度o 47°38” 54,10“-Prazo 30 anos。 -Travessia Aérea 02-漂浮在里约朱基亚-库德。 地理纬度S 24°19'58,00“-经度o 47°38” 52,20“-Prazo 30 anos。 -Travessia Aérea 03-漂浮在里约朱基亚-库德。 地理纬度S 24°19'58,00“-经度o 47°38” 52,00“-Prazo 30 anos。 -Travessia Aérea 04-漂浮在里约朱基亚-库德。 地理纬度S 24°19'59,00“-经度o 47°38” 51,70“-Prazo 30 anos。 -Travessia Aérea 05-漂浮在里约朱基亚-库德。 地理纬度S 24°19'59,40“-经度o 47°38” 51,50“-Prazo 30 anos。 -Travessia Aérea 06-漂浮在里约朱基亚-库德河上。 地理纬度S 24°19'59,90“-经度o 47°38” 51,30“-Prazo 30 anos。进程DAEE 9502113-附加到de Portaria 4063/19。 第二个例子: 中国石油天然气股份有限公司董事会董事会。43.052.497/0002-85,一个行政管理机构,一个行政管理机构 浅层,没有科蒂亚市政, 确认abaixo标识: -Travessia Aérea 01(TR-05)Estaca 248+11,50 BSTM deØ 海拔3,00米-科雷戈·福格斯(科雷戈·高加索)50491公里-库尔德。 地理纬度S 23°38'33,97“-经度o 47°03” 28,67“-Prazo 30 anos。 -特拉维西亚Aérea 02(TR-06)东部。275+13,70 3林哈斯德 BTTC deØ1,50米 -里贝奥达瓦格姆51124公里-库德。Geográficas 纬度S 23°38'49,97“-经度o 47°03'32,20“-普拉佐 30个其他人。 -特拉维西亚Aérea 03(TR-07)东部。290+11,15英国夏令时 1,20米-Ribeirão da Vargem河上游51420公里-Coord。 地理纬度S 23°38'54,45“-经度o 47°03” 41,39“-Prazo 30 anos。 -特拉维西亚Aérea 04(TR-08)东部。307+11,00 2林哈斯德 BDTC deØ1,20 m -瓦格姆河上游,51770公里-库德。 地理纬度S 23°38'57,81“-经度o 47°03” 52,83“-Prazo 30 anos。 -美国东部特拉维西亚Aérea 05(TR-09)。372+4.50 BSCC de 3.00 m x 3,00 m-Ribeirão da Vargem河上游53020公里-Coord。 地理纬度S 23°39'18,71“-经度o 47°04” 34,24“-Prazo 30 anos。进程DAEE 9822402-附加到de Portaria 4068/19。,python,regex,Python,Regex,我试图匹配每个“主题”开头的数据。应该是: (match1)-(match2)-Coord.(……和其他部分) 其中,match1将是“Travessia A Aérea 01”,而match2将是“Affluent do Rio Juquiá” 我试图与以下表达式匹配: -?(([A-z-èèèèèèèèèèèèèèèèèèèèèèèèèèèè 但是它比我想要的更匹配,因为匹配并不是以“-Coord.”结束的。我猜可能是这个表达式 ^-\s*([^\r\n]*?)\s*-\s*([^\r\n]

我试图匹配每个“主题”开头的数据。应该是:

(match1)-(match2)-Coord.
(……和其他部分)

其中,
match1
将是“Travessia A Aérea 01”,而
match2
将是“Affluent do Rio Juquiá”

我试图与以下表达式匹配:

-?(([A-z-èèèèèèèèèèèèèèèèèèèèèèèèèèèè


但是它比我想要的更匹配,因为匹配并不是以“-Coord.”结束的。

我猜可能是这个表达式

^-\s*([^\r\n]*?)\s*-\s*([^\r\n]*?)\s*-\s*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á

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

您可以使用两个捕获组,一个匹配的not
-
或一个不带可选部分或非贪婪量词的换行符

如果文本之间用空格连字符分隔,则可以按字面上的意思进行匹配

请注意,
\s
还匹配换行符,并在字符类中使用
a-z
,而不是
[a-Za-z]

^- ([^\r\n-]*) - ([^\r\n-]*) - Coord\.
解释

  • ^-
    字符串的开头、
    -
    和空格
  • ([^\r\n-]*)
    Capturegroup1匹配0+次非换行符或
    -
  • -
    逐字匹配
  • ([^\r\n-]*)
    Capturegroup 2匹配0+次而不是换行符或
    -
  • -
    逐字匹配
  • Coord\。
    Match Coord后跟文字点

也许可以尝试
r“-\s([^-]+)\s-\s([^-]+)\s-\sCoord。”
确实有帮助,但我仍然认为我的模式无法匹配我想要的所有字符串。例如,当单词have-like this:Travessia Aérea 01(TR-05)。@JoaoVitorMaciel你的意思是这样的吗?谢谢艾玛,这帮了大忙。但是,如果其他字符串i仍然有问题,因为它可能是我感兴趣的模式,有一个-在信中,像这样:里奥莫吉米林。在这种情况下,它将无法正确匹配。我想如果可以使用类似于[^-]的东西,但是要计算'-',在'-'之前和之后加空格。你知道我怎么做吗?我将编辑我的帖子,把这另一个例子。。。。谢谢!
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á
^- ([^\r\n-]*) - ([^\r\n-]*) - Coord\.