如何过滤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" >>

在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"
>>> 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
。是否需要
?因为您可以在
上拆分,然后获得。