【问题标题】:What regular expression to use to get a string that follows a certain word? [duplicate]使用什么正则表达式来获取跟随某个单词的字符串? [复制]
【发布时间】:2014-09-28 18:24:55
【问题描述】:

您好,我还是个初学者,一直在想办法在这个字符串上使用正则表达式:

Name: Brenden Walski  

我想获取名称的值,或者基本上我想获取“名称:”之后的所有内容。顺便说一句,我正在使用python。请帮忙。谢谢!

【问题讨论】:

  • 你不需要正则表达式。您可以只在冒号上拆分,然后去掉它的输出。 string.split(':').strip()

标签: python regex


【解决方案1】:

正则表达式方式:

>>> 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()。
  • 但是,在您的回答中,您声明 (.*?) 匹配所有内容 - 这具有误导性并且在技术上不正确,因为它是表达式 (.*?)$ 匹配所有内容到行尾。由于您使用了非贪婪运算符,因此它后面的表达式很重要。
猜你喜欢
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
相关资源
最近更新 更多