在Python RE中匹配模式的前后

在Python RE中匹配模式的前后,python,regex,python-3.x,Python,Regex,Python 3.x,我有以下字符串 string1 = "按照由 GPV 提供的相关报告; 世界卫生组织 WHO 发布的有关研究" string2 = "\n\n 介绍 INTRODUCTION" 如何删除汉字和英文首字母缩略词之间的空格 预期结果是: ”按照由GPV提供的相关报告; 世界卫生组织谁发布的有关研究" 但是,re模式应该而不是删除介绍和简介由于简介右侧没有汉字如果您可以使用第三方regex实现模块,它支持\p{script}标记,这使得此任务变得简单: \p{Han}+\s+\p{Latin}+\s

我有以下字符串

string1 = "按照由 GPV 提供的相关报告; 世界卫生组织 WHO 发布的有关研究"
string2 = "\n\n 介绍 INTRODUCTION"
如何删除汉字和英文首字母缩略词之间的空格

预期结果是:
”按照由GPV提供的相关报告; 世界卫生组织谁发布的有关研究"


但是,re模式应该而不是删除
介绍
简介
由于
简介
右侧没有汉字

如果您可以使用第三方regex实现模块,它支持
\p{script}
标记,这使得此任务变得简单:

\p{Han}+\s+\p{Latin}+\s+\p{Han}+
不幸的是,Python native
re
不支持这些

要删除空格,请使用捕获组选择周围的单词,并参考替换模式中的单词:

Match          (\p{Han}+)\s+(\p{Latin}+)\s+(\p{Han}+)
Replace by     \1\2\3

共享您的预期输出?因此,只有在英文首字母缩略词后面有sime中文首字母缩略词时,您才想删除中文和英文首字母缩略词后面的空格?是的@MayankPorwal@Aaron你是说re.sub(r“\p{Han}+\s+\p{Latin}+\s+\p{Han}+”,“”,string)?@JamesChang我刚刚意识到它不像python中那样工作;我正在检查是否有一个替代语法。我想应该有一些前瞻/落后的组合。这个问题的困难部分是找出多个前瞻/落后的用法。@JamesChang你想匹配什么样的实例?你说的是预期的结果结果是“按照由GPV提供的相关报告; 世界卫生组织谁发布的有关研究"", 这是我的正则表达式(至少在PCRE中)。如果您只想匹配空格,看起来您很幸运,因为
regex
模块似乎接受可变宽度lookbehind,这是很少见的。
(?您在这里使用了OR逻辑运算符。是否可以使用AND运算符来避免冗余?您到底想做什么?从匹配的模式中删除或替换两个空格?如果是,请将整个内容与
(\p{Han}+)\s+(\p{Latin}+)\s+(\p{Han}+)匹配
然后使用对第一、第二和第三捕获组的反向引用来制作替换字符串,这些捕获组将分别包含前面的中文单词、英文单词和后面的中文单词。