【发布时间】:2014-09-28 18:24:55
【问题描述】:
您好,我还是个初学者,一直在想办法在这个字符串上使用正则表达式:
Name: Brenden Walski
我想获取名称的值,或者基本上我想获取“名称:”之后的所有内容。顺便说一句,我正在使用python。请帮忙。谢谢!
【问题讨论】:
-
你不需要正则表达式。您可以只在冒号上拆分,然后去掉它的输出。
string.split(':').strip()
您好,我还是个初学者,一直在想办法在这个字符串上使用正则表达式:
Name: Brenden Walski
我想获取名称的值,或者基本上我想获取“名称:”之后的所有内容。顺便说一句,我正在使用python。请帮忙。谢谢!
【问题讨论】:
string.split(':').strip()
正则表达式方式:
>>> import re
>>> s = "Name: Brenden Walski"
>>> re.findall(r'^Name:(.*?)$', s)[0]
' Brenden Walski'
正则表达式为^Name:(.*?)$,意思是:
^ = "行首"Name: = 文字字符串“姓名:”(.*?) = "everything" - () 将其转换为捕获组,这意味着返回匹配项$ = "行尾"很长的说法是“行首,然后是字符“名称:”,然后是一个或多个任何可打印字符,然后是行尾”
“其他”方式:
>>> s.split(':')[1]
' Brenden Walski'
“其他”方式,名称可能包含::
>>> s[s.find(':')+1:]
' Brenden Walker: Jr'
【讨论】:
(.*?)$ 等价于 (.*),当 re.DOTALL 没有给出标志时。
(.*?) 并不意味着一切......它只能这样工作,因为您在其后添加了 $。否则,它将匹配 nothing(或通向下一个字符的最短序列)。
$(当然还有?),它仍然可以工作。然而,这个答案并不意味着是正则表达式的速成课程——此外,对于这个特定的字符串,我只会使用 split()。
(.*?) 匹配所有内容 - 这具有误导性并且在技术上不正确,因为它是表达式 (.*?)$ 匹配所有内容到行尾。由于您使用了非贪婪运算符,因此它后面的表达式很重要。