如何过滤python正则表达式中的模式,直到输入单词
在python中,我想提取一个特定的子字符串,直到提供输入字为止 考虑以下字符串:-如何过滤python正则表达式中的模式,直到输入单词,python,regex,Python,Regex,在python中,我想提取一个特定的子字符串,直到提供输入字为止 考虑以下字符串:- "Name: abc and Age:24" 我想分别提取字符串“Name:abc”和“änd“Age:24”。 我目前正在使用以下模式: re.search(r'%S+\s*:[\S\s]+',pattern). 但是o/p是整个字符串。您可以使用re.findall: >>> import re >>> s="Name: abc and Age:24" >>
"Name: abc and Age:24"
我想分别提取字符串“Name:abc”和“
änd“Age:24”
。
我目前正在使用以下模式:
re.search(r'%S+\s*:[\S\s]+',pattern).
但是o/p是整个字符串。您可以使用
re.findall
:
>>> import re
>>> s="Name: abc and Age:24"
>>> re.findall(r'[A-Za-z]+:[a-z\s]+|[A-Za-z]+:\d+',s)
['Name: abc and ', 'Age:24']
在前面的模式中,就像在字符串中一样,键(Age
和Name
)以大写字母开头,您可以使用[A-Za-z]+
来匹配它们。这将匹配大小写字母的任意组合,长度为1或以上,但对于:
之后的字符串的其余部分,您可以只使用小写字母,第二部分也一样。但是对于第二部分中:
之后的字符串,您只需匹配长度为1或更多的数字
如果可能在之后的第二部分中有字符串:
,则可以使用\w
而不是\d
:
>>> re.findall(r'[A-Za-z]+:[a-z\s]+|[A-Za-z]+:\w+',s)
['Name: abc def ghi ', 'Location:Earth']
您需要使用
re.findall
>>> s = "Name: abc and Age:24"
>>> re.findall(r'\S+\s*:.*?(?=\s*\S+\s*:|$)', s)
['Name: abc and', 'Age:24']
>>> re.findall(r'[^\s:]+\s*:.*?(?=\s*[^\s:]+\s*:|$)', s)
['Name: abc and', 'Age:24']
匹配任何字符,但不匹配[^\s::+
或空格一次或多次。因此,这与关键部分相匹配:
匹配零个或多个空格和冒号符号\s*:
在*?
行的关键部分或结尾<代码>(?=…)称为正向前瞻,它断言匹配是否可能。它不会匹配任何单个字符(?=\s*[^\s:+\s*:|$)
re.split
>>> re.split(r'\s+(?=[^\s:]+\s*:)', s)
['Name: abc and', 'Age:24']
您可以使用以下正则表达式:
\w+[:]\w+|\w+[:](\s)\w+|\w+(\s)[:]\w+
下面是一个细分:
\w+[:]\w+
\w表示获取一个单词,[:]表示获取一个冒号字符,+符号表示获取一个位于冒号字符之前的单词。其余部分则相反:)
|符号只是一个OR运算符,我用它来检查空格是否跟在冒号后面或前面
它将获得冒号前后的单词。当冒号前后有空格时,它也起作用。您能解释一下这是什么意思吗?*?(?=\s*\s+\s*:|$)通常^表示从开头开始,如果字符串右侧?[^\s:]+应表示一个或多个空格,或从开头开始的“:”字符?任何字符,但不包括空格或冒号,一次或多次。匹配发生在输入字符串中的任何位置。如果字符串是“Name:abc def ghi Location:Earth”,那么模式可能是什么?@NandaKishoreCh如果第二部分中可能有字符串,则需要使用
\w
而不是\d
。是否需要和?因为您可以在和上拆分,然后获得。