首页 > 解决方案 > 用正则表达式分隔单词(不按特定顺序)

问题描述

从文本中提取例如;以下句子包含首字母大写。我怎样才能将它们分开?

文本:

A. lorem ipsum dolor 坐 B . 41dipiscing 精英 sedC. lorem ipsum dolor sit amet D. 35 Consectetur adipiscing E .Sed do eiusmod tempor

目标:

A. lorem ipsum dolor sit 
B . 41dipiscing elit sed 
C. lorem ipsum dolor sit amet 
D. 35 Consectetur adipiscing 
E .Sed do eiusmod tempor

我做了什么?

^(([a-zA-Z]{1}|[0-9]+)\s*[.,]{1})(.*)$

结果:

https://regex101.com/r/4HB0oD/1

但是我的正则表达式代码没有第一句话就检测不到它。这是什么原因?

标签: regex

解决方案


也许,

(?=[A-Z]\s*\.)

可能工作正常。

正则表达式演示

测试

import re

string = '''
A. lorem ipsum dolor sit B . 41dipiscing elit sedC. lorem ipsum dolor sit amet D. 35 Consectetur adipiscing E .Sed do eiusmod tempor
'''

print(re.sub(r'(?=[A-Z]\s*\.)', '\n', string))

输出


A. lorem ipsum dolor sit 
B . 41dipiscing elit sed
C. lorem ipsum dolor sit amet 
D. 35 Consectetur adipiscing 
E .Sed do eiusmod tempor


如果您希望简化/更新/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您有兴趣,可以在此调试器链接中观看匹配步骤或修改它们。调试器演示了 RegEx 引擎如何逐步使用一些示例输入字符串并执行匹配过程。


正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读