繁体   English   中英

在python中使用正则表达式返回特定单词之间的大写单词

[英]Using regex in python to return capitalized words between a specific word

我是使用正则表达式的新手。

我有一个字符串形式

                Waco, Texas     

                Unit Dose 13 and 





           SECTION 011100       SUMMARY OF WORK





    INDEX   PAGE



PART 1. - GENERAL   1

1.1.    RELATED DOCUMENTS   1

1.2.    PROJECT DESCRIPTION 1

1.3.    OWNER   1

1.4.    ARCHITECT/ENGINEER  2

1.5.    PURCHASE CONTRACTS  2

1.6.    OWNER-FURNISHED ITEMS   2

1.7.    CONTRACTOR-FURNISHED ITEMS  3

1.8.    CONTRACTOR USE OF PREMISES  3

1.9.    OWNER OCCUPANCY 3

1.10.   WORK RESTRICTIONS   4

PART 2. - PRODUCTS - NOT APPLICABLE 4

PART 3. - EXECUTION - NOT APPLICABLE    4

我为多余的空白表示歉意,但这是我解析以获取字符串的单词document的形式。

我需要捕获第1部分,第2部分和第3部分之间的所有标题,并将它们存储在其他列表中。 到目前为止,我有

matchedtext = re.findall('(?<=PART) (.*?) (?=PART)', text, re.DOTALL)

如果我理解正确,这些环顾四周应该将PART用作一种基点,并在两者之间获取文本。 但是,当我运行代码时,matchedtext不会填充任何内容。

问题的第二部分是,当我在不同出现的PART之间插入文本时,如何仅将大写的标题保存在列表中,并为每个标题添加字符串。 我在单词文档中的一些字符串包含小写单词,但是我只想全部用大写字母表示。

因此,总结一下如何捕获字符串中特定单词之间的文本,一旦有了它们,如何将单词另存为列表中的单个字符串。

谢谢您的帮助! :D

您甚至不需要使用正则表达式,只需对字符串使用split函数。 如果s是您的字符串名称,则为:

s.split('PART')

这将包括第一个PART之前的文本,因此不要使用列表的第一个元素:

texts_between_parts = s.split('PART')[1:]

您稍后可以使用字符串方法isupper检查单词是否全部大写。

我会忘记抓住第1部分和第2部分之间的所有内容,等等。 我将使用以下正则表达式解析每一行,并使用第1组来确定标题的分组。

^(\d)(\.|\d)+\s+([^a-z]+?)\s+\d$

第一组是零件编号/部分

第2组是子部分

第3组是标题

import re

p = re.compile('^(\d)(\.|\d)+\s+([^a-z]+?)\s+\d$')

m = p.match( '1.4.    ARCHITECT/ENGINEER  2' )

if m:

    print('Match found: ', m.groups())

else:

    print('No match')

找到匹配项:('1','。','ARCHITECT / ENGINEER')

import re
p = re.compile('^(\d)(\.|\d)+\s+([^a-z]+?)\s+\d$')
m = p.match( '1.4.    ARCHITECT/ENGINEER  2' )
if m:
    print('Section: ', m.group(1))
    print('Heading: ', m.group(3))
else:
    print('No match')

# Output 
# Section:  1
# Heading:  ARCHITECT/ENGINEER

暂无
暂无

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

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