如何定义regex,如:include letters and(),但不包括。和数字

2024-06-01 05:31:02 发布

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

我是使用Python的regex新手。现在我有一个问题,比如:

myTry=['a bb Aas','aa 1 Aasdf','aa bb (cc) AA','aaa ASD','aa . ASD','aaaa 1 bb Aas']

我想找到的是在大写字母之前的子字符串(本例中为A),它可能包含多个单词和(),但不包括数字和。。因此,在本例中,应检测myTry中的以下字符串:

'a bb Aas'
'aa bb (cc) AA'
'aaa ASD'

结果应该是:

'a bb'
'aa bb (cc)'
'aaa'

我不知道如何使用regex来定义一个模式,比如“同时包含某些内容和排除某些内容”。你知道吗

尤其是第一个和最后一个字符串:“a bb Aas”和“aaaa 1 bb Aas”。我想要第一个,我不想要第二个。但我不知道在这些单词里会有多少个单词和数字。但只要有数字和数字。在首都之前,我不需要它们。你知道吗


Tags: 字符串内容数字单词regexaaccbb
0条回答
网友
1楼 · 发布于 2024-06-01 05:31:02

如果包含字母、()和空格,则会自动排除其他元素。你知道吗

import re

myTry = ['aa bb Aas','aa 1 Aasdf','aa bb (cc) AA','aa ASD','aa . ASD']

for item in myTry:
    if re.match('[a-z() ]*A', item):
        print(item)
网友
2楼 · 发布于 2024-06-01 05:31:02

可以使用两个regex操作。第一种方法通过匹配^[a-zA-Z\s\(\)]*$过滤出无效的结果,第二种方法使用正向前瞻:.*?(?= [A-Z])收集所需的子字符串。你知道吗

import re

my_try = ['a bb Aas','aa 1 Aasdf','aa bb (cc) AA','aaa ASD','aa . ASD','aaaa 1 bb Aas']
filtered = [x for x in my_try if re.match(r'^[a-zA-Z\s\(\)]*$', x)]
result = [re.match(r'.*?(?= [A-Z])', x).group(0) for x in filtered]

print(result) # => ['a bb', 'aa bb (cc)', 'aaa']

如果您预期某些字符串可能会通过筛选(即,包含除字母字符、括号或空格以外的内容),但可能与“先行”不匹配,则需要筛选中间结果:

import re

my_try = ['a bb Aas','aaa ASD','aa . ASD','aaaa 1 bb Aas', '']
#                                                          ^^ could cause problems
filtered = [x for x in my_try if re.match(r'^[a-zA-Z\s\(\)]*$', x)]
matches = [re.match(r'.*?(?= [A-Z])', x) for x in filtered]
result = [x.group(0) for x in matches if x]

print(result) # => ['a bb', 'aaa']

相关问题 更多 >