You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式提取UBICADO与COMUNA间的文本?

解决提取UBICADO和COMUNA之间文本的正则问题

嘿,我来帮你搞定这个正则的问题!你原来的表达式((ubicado) =?).*的问题在于它是贪婪匹配,会从ubicado开始一直抓文本到结尾,根本不会停在comuna那里。而且也没考虑大小写的问题(比如示例里的Comuna是大写开头),所以得调整一下。

推荐的正则表达式方案

这里有两种简单好用的写法,都能满足你的需求:

方案1:用捕获组(直观易懂)

(?i)ubicado(.*?)comuna
  • (?i):开启不区分大小写模式,不管是ubicado/UBICADO还是Comuna/comuna都能匹配。
  • ubicado:匹配起始标记词(不区分大小写)。
  • (.*?):非贪婪匹配任意字符(直到遇到第一个comuna就停止),括号把这部分做成捕获组,方便提取。
  • comuna:匹配结束标记词(不区分大小写)。

使用的时候,你只需要取第一个捕获组的内容就行,比如在Python里:

import re

sample_text = "departamento número veintidós del segundo piso, señalan, <strong>ubicado</strong> en calle Victoria Subercaseaux número ciento noventa y uno, <strong>Comuna</strong> de Santiago, Región Metropolitana, y demás derechos en los bienes comunes, en proporción al valor del mismo, entre los cuales se encuentra el terreno, que deslinda: NORTE, calle Valdivia; SUR, propiedad de doña Laura Zegers de"

pattern = r'(?i)ubicado(.*?)comuna'
match_result = re.search(pattern, sample_text)
if match_result:
    # 用strip()去掉前后多余的空格,更整洁
    extracted_text = match_result.group(1).strip()
    print(extracted_text)

输出结果就是:

en calle Victoria Subercaseaux número ciento noventa y uno,

方案2:用正向断言(不包含标记词,更精准)

如果你不想在匹配结果里不小心带上标记词,也可以用前后断言:

(?i)(?<=ubicado).*?(?=comuna)
  • (?<=ubicado):正向回顾后发断言,确保前面是ubicado,但不会把它包含在匹配结果里。
  • (?=comuna):正向预测先行断言,确保后面是comuna,同样不会包含它。
  • 其他部分和方案1一样,非贪婪匹配+大小写不敏感。

关键注意点

  1. 一定要用非贪婪匹配.*?:如果用.*(贪婪模式),它会直接匹配到文本最后一个comuna,而不是第一个,这大概率不是你想要的。
  2. 大小写不敏感:因为示例里的标记词大小写不一致,(?i)修饰符能帮你覆盖所有大小写组合的情况。
  3. 处理HTML标签:如果你的文本里有像<strong>这样的标签,也不用担心——正则会忽略它们,因为我们只匹配标记词本身,标签会被包含在中间的文本里,如果想排除标签的话,可以稍微调整正则,比如(?i)(?<=<strong>ubicado</strong>).*?(?=<strong>comuna</strong>),但这个只适用于固定标签的情况,通用场景还是用前面的方案更稳妥。

内容的提问来源于stack exchange,提问作者Alvarows

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:55:45