Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的正则表达式_Python_Regex_String - Fatal编程技术网

python中的正则表达式

python中的正则表达式,python,regex,string,Python,Regex,String,如果这个问题太简单,我很抱歉,但我似乎无法解释这个问题。我想解析一个字符串。我想提取“最终分数是:'和'”之间的单词。换句话说,如果我有一个字符串“最终分数是:25”。我希望它提取25。我不知道怎么做。我应该用火柴吗?还是分开 谢谢这样做不需要正则表达式。。。在“:”上进行拆分,然后获取最后一个元素。或者,只使用字符串切片 >>> "The final score is: 25."[-3:-1] '25' >>> s.split(":")[-1].strip

如果这个问题太简单,我很抱歉,但我似乎无法解释这个问题。我想解析一个字符串。我想提取“最终分数是:'和'”之间的单词。换句话说,如果我有一个字符串“最终分数是:25”。我希望它提取25。我不知道怎么做。我应该用火柴吗?还是分开


谢谢

这样做不需要正则表达式。。。在“:”上进行拆分,然后获取最后一个元素。或者,只使用字符串切片

>>> "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