如何定义正则表达式:包含字母和()但不包含。和使用Python的数字
我不熟悉使用Python的正则表达式。现在我有一个问题,比如:如何定义正则表达式:包含字母和()但不包含。和使用Python的数字,python,regex,string,find,except,Python,Regex,String,Find,Except,我不熟悉使用Python的正则表达式。现在我有一个问题,比如: 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
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'
我不知道如何使用正则表达式来定义一种模式,比如“同时包含某些内容和排除某些内容”
特别是第一个和最后一个字符串:“a bb Aas”和“aaaa 1 bb Aas”。我想要第一个,我不想要第二个。但我不知道这些单词会有多少个单词和多少个数字。但只要有数字和数字。在大写字母之前,我不需要它们。如果包含字母、()和空格,则会自动排除其他元素
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)
您可以使用两个正则表达式操作。第一个通过在
^[a-zA-Z\s\(\)]*$
上进行匹配来过滤出无效的结果,第二个使用正向前瞻来收集所需的子字符串:*?(?=[a-Z])
如果您预计某些字符串可能会通过筛选(即,包含除字母字符、括号或空格以外的内容),但可能与前向查找不匹配,则需要筛选中间结果:
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']
如果包含字母、()和空格,则会自动排除其他元素。
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']