如何构建正则检测符合指定模式的未知次数重复连续描述元素并封装
解决连续描述元素组的正则匹配与替换问题
需求说明
识别文本中由多个指定模式修饰元素组成的连续组,将每组整体用((DESCRIP)元素内容)格式包裹,示例中有3组符合要求的连续描述组。
修改后的Python代码
import re input_text = "hjshhshs el principal, amplio, de gran importancia, y más costoso hotel de la zona costera. Es una sobrilla roja, bastante amplia y incluso cómoda de llevar. Hay autos rápidos, más costosos, y veloces. también, hay otro tipo de autos menos costosos" # 匹配单个修饰短语:支持单个形容词、带程度前缀/介词的修饰短语 modifier_phrase = r"(?:(?:a[úu]n|todav[íi]a|incluso)\s+)?(?:de\s*gran|bastante|un\s*tanto|un\s*poco)?\s*(?:m[áa]s|menos)?\s*(?:\w+(?:\s+\w+)*)" # 匹配修饰元素间的连接符:逗号、逗号加y、直接加y connector = r"(?:,\s*|,\s*y\s*|y\s*)" # 匹配连续的修饰组:至少两个修饰短语通过连接符组成的序列 descrip_group = rf"({modifier_phrase}(?:{connector}{modifier_phrase})+)" # 替换整个连续组为目标格式 output_text = re.sub(descrip_group, r"((DESCRIP)\1)", input_text, flags=re.IGNORECASE) print(repr(output_text))
代码说明
- 修饰短语正则:
modifier_phrase覆盖所有符合要求的修饰单元,包括:- 单个形容词:如
principal、roja - 带程度前缀的短语:如
bastante amplia、más costoso、incluso cómoda - 带介词的修饰短语:如
de gran importancia
- 单个形容词:如
- 连接符正则:
connector准确匹配修饰元素之间的合法分隔方式,涵盖逗号、逗号加y、直接加y三种情况。 - 连续组匹配:
descrip_group匹配由至少两个修饰短语通过连接符组成的连续序列,确保只处理多元素的描述组。 - 替换逻辑:用
re.sub将匹配到的整个连续组替换为((DESCRIP)组内容)格式,保留原组内的所有内容。
输出结果
运行代码后输出与目标一致:
"hjshhshs el ((DESCRIP)principal, amplio, de gran importancia, y más costoso) hotel de la zona costera. Es una sobrilla ((DESCRIP)roja, bastante amplia y incluso cómoda) de llevar. Hay autos ((DESCRIP)rápidos, más costosos, y veloces). también, hay otro tipo de autos menos costosos"
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

