[英]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']
在前面的字符串模式中,键( Age
和Name
)以大写字母开头,您可以使用[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']
您可以使用此正则表达式:
\w+[:]\w+|\w+[:](\s)\w+|\w+(\s)[:]\w+
这是一个细分:
\w+[:]\w+
\\ w表示得到一个单词,[:]表示得到一个冒号,+符号表示得到一个在冒号之前的单词。 其余的工作方式相反:)
| symbol只是一个OR运算符,我用它来检查空格是否在冒号之前或之后。
它将得到冒号前后的单词。 当在冒号之前或之后也有空格时,它会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.