如何为中心对齐的大写单词编写正则表达式?

2024-04-19 23:40:27 发布

您现在位置:Python中文网/ 问答频道 /正文

                         THE COMPANY

ABCD is a new company in the field of Marketing. bla bla bla.

DESCRIPTION

xyz....                         

                         SUMMARY

asdf.......

对于上面这样的文本,我想选择像公司和摘要这样的标题。我想用Python写一段代码。我一直在尝试使用RegEx,但还没有找到一种方法来编写与中心对齐的单词匹配的模式。我对任何新方法都持开放态度,只要它可以用Python实现。你知道吗


Tags: ofthe方法infieldnewisdescription
2条回答

如果我没听错的话,你需要匹配由某种缩进组成的行,后跟一些大写单词。你知道吗

如果是这样的话,下面的正则表达式应该可以做到这一点:

(?m)^(?: +)[A-Z\s]+$

让我们一块一块地来。你知道吗

(?m)告诉正则表达式匹配器将^$作为行的开始和结束,而不是字符串的开始和结束。你知道吗

^匹配行的开头。你知道吗

(?: +)是一个或多个空间的非捕获组。换句话说,模式的这一部分找到尽可能多的空间,然后忽略它们。毕竟,我们找的不是空格,而是文本。如果您也需要空格,只需删除(?:),剩下\s+。如果您喜欢制表符,请将\s替换为\t。你知道吗

[A-Z\s]+匹配一个或多个大写字母或空格字符。你知道吗

$匹配行尾。你知道吗

将所有这些放在一起(并放到Python中),我们得到:

import re
headers = re.findall('(?m)^(?:\s+)[A-Z\s]+$', your_string)

我更喜欢用重新匹配地址:

import re

example = '''                         THE COMPANY

ABCD is a new company in the field of Marketing. bla bla bla.

DESCRIPTION

xyz....                         

                         SUMMARY

asdf.......'''

headlines = []
for line in example.split('\n'):
    m = re.match(r'^\s{4,}([A-Z0-9 \t\._-]+)', line)
    if m:
        headlines.append(m.group(1))
print(headlines)

另一种方法是关于芬德尔地址:

headlines = [x.lstrip(' \n') for x in re.findall(r'^\s{4,}[A-Z0-9 \t\._-]+', example, re.M)]
print(headlines)

相关问题 更多 >