簡體   English   中英

如何在python正則表達式中過濾出模式,直到輸入單詞

[英]how to filter out a pattern in python regular expressions, till the input word

在python中,我想提取特定的子字符串,直到提供輸入的單詞為止。

考慮以下字符串:

"Name: abc and Age:24"

我想分別提取字符串"Name : abc and" ä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']

正則表達式可視化

Debuggex演示

在前面的字符串模式中,鍵( AgeName )以大寫字母開頭,您可以使用[A-Za-z]+進行匹配。它將匹配len 1或更大的任何大小寫字母組合,但是對於after之后的字符串:您可以只使用小寫字母,第二部分也可以使用相同的字符。但是對於after :在第二部分中,您只需匹配長度為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']

DEMO

您可以使用此正則表達式:

\w+[:]\w+|\w+[:](\s)\w+|\w+(\s)[:]\w+

這是一個細分:

\w+[:]\w+

\\ w表示得到一個單詞,[:]表示得到一個冒號,+符號表示得到一個在冒號之前的單詞。 其余的工作方式相反:)

| symbol只是一個OR運算符,我用它來檢查空格是否在冒號之前或之后。

它將得到冒號前后的單詞。 當在冒號之前或之后也有空格時,它會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM