如何在句子间添加空格但忽略链接(Python正则场景)
如何在给句号后大写字母加空格时忽略链接中的点?
解决方案1:分割URL与非URL部分分别处理
这种方法通过将文本拆分为链接片段和普通文本片段,仅对普通文本应用空格添加规则,从根源上避免修改链接内的点结构。
代码实现:
import re def add_space_after_period(text): # 用正则分割文本,保留链接部分作为独立片段 segments = re.split(r'(https?://\S+)', text) processed_segments = [] for seg in segments: # 判断当前片段是否为链接,是则直接保留 if seg.startswith(('http://', 'https://')): processed_segments.append(seg) else: # 对普通文本应用原有的空格添加规则 processed_seg = re.sub(r'\.([A-Z])', r'. \1', seg) processed_segments.append(processed_seg) return ''.join(processed_segments)
解决方案2:占位符替换法
先将所有链接临时替换为唯一占位符,处理完普通文本后再恢复原始链接,适合需要兼容更复杂链接格式的场景。
代码实现:
import re def add_space_after_period(text): # 匹配http/https开头的链接 url_pattern = r'https?://\S+' # 提取文本中所有链接 urls = re.findall(url_pattern, text) # 将链接替换为唯一占位符,避免冲突 for idx, url in enumerate(urls): text = text.replace(url, f'__TEMP_URL_{idx}__') # 对普通文本执行空格添加操作 text = re.sub(r'\.([A-Z])', r'. \1', text) # 将占位符还原为原始链接 for idx, url in enumerate(urls): text = text.replace(f'__TEMP_URL_{idx}__', url) return text
测试示例
输入:
"This is one.This is two. Check this link: https://www.website.com/Article.Name.pdf. Another sentence.This is four."
输出:
"This is one. This is two. Check this link: https://www.website.com/Article.Name.pdf. Another sentence. This is four."
两种方案都能精准区分普通文本和链接,确保仅在句子间的句号后添加空格,完全保留链接内的点结构。
内容的提问来源于stack exchange,提问作者mimic
相关产品推荐
相关产品推荐

