python中的正则表达式
如果这个问题太简单,我很抱歉,但我似乎无法解释这个问题。我想解析一个字符串。我想提取“最终分数是:'和'”之间的单词。换句话说,如果我有一个字符串“最终分数是:25”。我希望它提取25。我不知道怎么做。我应该用火柴吗?还是分开python中的正则表达式,python,regex,string,Python,Regex,String,如果这个问题太简单,我很抱歉,但我似乎无法解释这个问题。我想解析一个字符串。我想提取“最终分数是:'和'”之间的单词。换句话说,如果我有一个字符串“最终分数是:25”。我希望它提取25。我不知道怎么做。我应该用火柴吗?还是分开 谢谢这样做不需要正则表达式。。。在“:”上进行拆分,然后获取最后一个元素。或者,只使用字符串切片 >>> "The final score is: 25."[-3:-1] '25' >>> s.split(":")[-1].strip
谢谢这样做不需要正则表达式。。。在“:”上进行拆分,然后获取最后一个元素。或者,只使用字符串切片
>>> "The final score is: 25."[-3:-1]
'25'
>>> s.split(":")[-1].strip() #use -1 to always get the last element
'25'
你不需要正则表达式来做这个。。。在“:”上进行拆分,然后获取最后一个元素。或者,只使用字符串切片
>>> "The final score is: 25."[-3:-1]
'25'
>>> s.split(":")[-1].strip() #use -1 to always get the last element
'25'
如果您知道信息的格式总是这样,那么您可以简单地使用拆分:
s = "The final score is: 25"
score = s.split(':')[1].strip()
这将导致分数
25
。作为安全措施,我在结尾使用.strip()删除任何空白。如果您知道信息的格式总是这样,那么您可以简单地使用拆分:
s = "The final score is: 25"
score = s.split(':')[1].strip()
这将导致分数25
。作为安全措施,我在结尾使用.strip()删除任何空格。您指的是“捕获”一些介于“最终分数为:”和“.”之间的字符。这意味着你有一个团队。组需要()的
查看所有规则
因为这闻起来像是家庭作业,所以我不会提供一切。RE将具有以下格式:
matcher = r'something:(something).'
()的定义组,该组保存在match对象中,可以检索
您有规则来匹配特定字母“T”、“h”、“e”等
你有规则来匹配数字“\d”你说的是“捕获”一些介于“最终分数是:”和“.”之间的字符。这意味着你有一个团队。组需要()的
查看所有规则
因为这闻起来像是家庭作业,所以我不会提供一切。RE将具有以下格式:
matcher = r'something:(something).'
()的定义组,该组保存在match对象中,可以检索
您有规则来匹配特定字母“T”、“h”、“e”等
您有规则来匹配数字“\d”如果您试图理解正则表达式,而不仅仅是试图从字符串中获取值,您可能会发现这很有用 您需要的第一个概念是分组。正则表达式中的括号用于分隔组
re.match()
有一个groups()
方法,该方法返回与模式中的组匹配的文本元组。例如:
>>> re.match('foo(bar)baz', 'foobarbaz').groups()
('bar',)
因此,在您的案例中,您将创建一个模式,将文本匹配到冒号,然后创建一个组,匹配您正在搜索的文本。现在我们进入问题的第二部分:你应该搜索什么样的模式?例如,这种模式肯定会起作用:
The final score is: (25).
但是它并不特别有用,因为它只会返回一个匹配项(在第一组中是25
),如果您匹配的字符串是,那么最终的分数是:25。
。它与任何其他字符串都不匹配
在编写正则表达式时,您会问自己:“输入字符串的哪些部分可以更改,以及如何更改?”这会告诉您要编写哪种模式
例如,如果源代码始终包含且仅包含一个冒号,则模式的第一部分可以是[^::]*:
。您正在定义一类除冒号以外的所有字符([^:]
),表示要将其匹配零次或多次(*
),然后表示要匹配冒号(:
)
如果您知道源代码总是以句点结尾,那么可以用相同的方式来表示用于组的模式:“匹配每个非句点的字符”,或[^.]*
。你会得到这样的结果:
s = 'The final score is: 25.'
>>> re.match(r'[^:]*:([^.]*)', s).groups()
(' 25',)
但是,如果要捕获的值包含句点,则会中断。对于捕获除句点以外的所有内容的模式,您可以将组定义为([\$]*)
(以这种方式使用$
行尾元字符意味着您希望匹配此行中的零个或多个剩余字符),然后是$
。终端$
意味着为了使模式匹配,它必须匹配行尾的周期。该组捕获尽可能多的字符,直到抓取更多字符将导致模式不匹配为止
这意味着这是可行的:
>>> s = "The final score is: this.is.something.different."
>>> re.match(r'[^:]*:([^\$]*).$', s).groups()
(' this.is.something.different',)
好的,现在让我们看看另一种可能的方法。假设我们对输入一无所知,只知道有一个冒号,然后在后面的某个地方有一个数字,可能在字符串的末尾,也可能不在。在本例中,我们的捕获组显然将是([\d]*)
,它捕获它找到的所有数字。但是,我们如何制定一种模式,使其与尽可能广泛的输入正确匹配?像这样:
>>> s = '9. The answer is: 25 or thereabouts.'
>>> re.match(r'[^:]*[^\d]*([\d]*)', s).groups()
('25',)
从左到右,该模式表示:首先,匹配所有非冒号的内容。然后,一旦你点击冒号,匹配所有不是数字的东西。然后抓住所有的数字
我希望这有帮助。我自己还在努力学习正则表达式,这就是为什么我要费心写一个如此详细的答案。如果您试图理解正则表达式,而不仅仅是试图从字符串中获取值,您可能会发现这很有帮助 您需要的第一个概念是分组。正则表达式中的括号用于分隔组
re.match()
有一个groups()
方法,该方法返回与模式中的组匹配的文本元组。例如:
>>> re.match('foo(bar)baz', 'foobarbaz').groups()
('bar',)
因此,在您的案例中,您将创建一个模式,将文本匹配到冒号,然后创建一个组,匹配您正在搜索的文本。现在我们进入问题的第二部分:你应该搜索什么样的模式?例如,这种模式肯定会起作用:
The final score is: (25).
但是它并不是特别有用,因为它只会返回一个匹配项(在第一组中是25
)