繁体   English   中英

用大写和小写分割多个连接的单词

[英]Split multiple joined words with upper and lower case

我发现了一些与此主题有关的问题。 但是,我还没有找到一种解决方案,该解决方案带来了一个特定的想法,例如如何使用正则表达式将连接的单词(西班牙语)以大写和小写分割。

我正在使用PyPDF2以便从多个pdf提取文本。 信息始终处于相同的顺序。

运行PyPDF2代码后,我得到以下项目:

'MASCULINOFecha de NacimientoLugar de Nacimiento'
'CASADONivel Educativo'

在这两种情况下,项目都是pdf内容中的关键字。 我试图获得的输出应该是这样的(使用前面的示例):

'MASCULINO'
'Fecha de Nacimiento'
'Lugar de Nacimiento'
'CASADO'
'Nivel Educativo'

我尝试了正则表达式模块来拆分特定模式。 到目前为止,这是我的代码:

pdfFile = open('example.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFile)
for page in range(0, pdfReader.getNumPages()):
    text = pdfReader.getPage(page).extractText()
    for line in text.split(':'):
        pattern = re.compile(r'([A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+)')
        result = re.findall(pattern, line)
        print result

它拆分了一些项目,但没有全部。

是否有更好的正则表达式模式来拆分这些单词?

解决该问题的任何建议都是正确的。 谢谢

尝试使用(?<=[A-Za-z])(?=[AZ][az])并替换为\\n或split。

这将检测大写或小写与大写或小写之间的zero-width 这似乎是逻辑上的分隔符。

输入项

MASCULINO|Fecha de Nacimiento|Lugar de Nacimiento
CASADO|Nivel Educativo

| 表示匹配的零宽度。

输出量

MASCULINO
Fecha de Nacimiento
Lugar de Nacimiento
CASADO
Nivel Educativo

Regex101演示

正如维克多在评论中提到的

您不能将re.split与匹配正则表达式的空字符串一起使用。 如果需要拆分,请使用PyPi正则表达式模块。

re.sub中没有这种错误,它是一种变通方法:您可以使用re.sub将未使用的字符插入字符串,然后使用此字符进行re.split。 只需选择输入中肯定不存在的一些字符(通常是控制字符,或未使用的Unicode范围中的字符)。

~替换为匹配的零宽度并分割为~将为您提供结果数组。

Python代码:

import re
line='MASCULINOFecha de NacimientoLugar de Nacimiento CASADONivel Educativo'
result = re.sub('(?<=[A-Za-z])(?=[A-Z][a-z])', '~', line,)
result = re.split('~', result)
print result

Ideone演示

\\B(?=[AZ][az])上拆分。 它会发现大写字母,后跟小写字母,前者没有单词边界。

完成222个步骤的测试用例- 在此处查看

问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM