Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何定义正则表达式:包含字母和()但不包含。和使用Python的数字_Python_Regex_String_Find_Except - Fatal编程技术网

如何定义正则表达式:包含字母和()但不包含。和使用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

我不熟悉使用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 (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']