Python 使用正则表达式捕获整数/日期

Python 使用正则表达式捕获整数/日期,python,regex,Python,Regex,我在使用正则表达式正确捕获整数和日期时遇到问题 整数 国际测试:“今天是2017年6月28日,有17.5%的可能性下雨” int_pattern=re.findall(r'\d[0-9].*,int_测试) 这个正则表达式的问题是,它捕获了int_测试中的“6、28、2017、17和5”。我无法找到一种方法来捕获仅由空格包围的整数 日期 日期测试=“今天是2017年6月28日或2017年6月28日或2017年6月28日或2017年6月28日或2017年6月28日” 日期模式=re.findall

我在使用正则表达式正确捕获整数和日期时遇到问题

整数

国际测试:“今天是2017年6月28日,有17.5%的可能性下雨”

int_pattern=re.findall(r'\d[0-9].*,int_测试)

这个正则表达式的问题是,它捕获了int_测试中的“6、28、2017、17和5”。我无法找到一种方法来捕获仅由空格包围的整数

日期

日期测试=“今天是2017年6月28日或2017年6月28日或2017年6月28日或2017年6月28日或2017年6月28日”

日期模式=re.findall(r'\d.[-/]\d+',日期测试)

对于这一个,我已经编写了代码来支持日期之间的“/”或“-”。我已经成功地捕获了“/”或“-”之前或之后的数字,但我需要一种方法来捕获句子中“/”或“-”之前或之后的字符数量


任何帮助都将不胜感激

这里是整数的正则表达式:
\s(\d+)\s
-它使用捕获组,您可以参考这些组。
演示:

这是日期的正则表达式:

(\d{1,2}|[a-zA-Z]{2,8}) # day or month
(?:[\/-]{1})            # separator
(\d{1,2}|[a-zA-Z]{2,8}) # day or month
(?:[\/-]{1})            # separator
(\d{4})                 # year

演示:

这里是整数的正则表达式:
\s(\d+)\s
-它使用捕获组,您可以参考这些组。
演示:

这是日期的正则表达式:

(\d{1,2}|[a-zA-Z]{2,8}) # day or month
(?:[\/-]{1})            # separator
(\d{1,2}|[a-zA-Z]{2,8}) # day or month
(?:[\/-]{1})            # separator
(\d{4})                 # year

演示:

我相信像这样的正则表达式就是你想要的:
\s(\d+)\s
我相信像这样的正则表达式就是你想要的:
\s(\d+)\s

将捕获您的所有日期,效率更高,但它还将捕获其他内容,如
foo/bar/1111



将捕获您的所有日期,效率更高,但它还将捕获其他内容,如
foo/bar/1111

“仅当捕获的整数的左边或右边没有字母、数字或字符时。”这是什么意思?当然,如果捕获的整数没有左边或右边的字符,那么字符串只有一个字符长?添加预期的输出-在这两种情况下,您到底想捕获什么。@Tomwylie举个例子,我只想在没有单个字母[A-Z]或[A-Z]且没有其他符号(在本例中,它将是“/”的情况下捕获整数对于日期,对于浮点数,则为“.”。我遇到一个问题,特别是排除了其他单个字符和符号。@streetturtle当整数前后都没有单个字符或数字时,我希望捕获的数据类型只能是integer。对于int_测试字符串,不应捕获任何内容,因为有“/”或“.”在每个整数之前或之后。如果字符串是“一小时内有60分钟”,则只应捕获60分钟。您是否尝试过使用任何在线正则表达式测试程序来处理您的模式?如regex101.com?“仅当捕获的整数的左或右都没有字母、数字或字符时。”,这意味着什么?当然,如果捕获的整数没有左边或右边的字符,则该字符串只有一个字符长?添加预期输出-在这两种情况下都要捕获的内容。@Tomwylie举个例子,我只想在没有单个字母[A-Z]或[A-Z]且没有其他符号的情况下捕获整数(在本例中,日期为“/”和“.”对于浮点数。我有一个问题,特别是排除那些其他单个字符和符号。@streetturtle如果在整数之前或之后都没有单个字符或数字,我希望捕获的数据类型只能是integer。对于int_测试字符串,不应捕获任何内容,因为有“/”或“.”在每个整数之前或之后。如果字符串为“一小时内有60分钟”,只应捕获60。您是否尝试过使用任何在线正则表达式测试程序来处理您的模式?如regex101.com?在将代码加载到PyCharm中时,整数正则表达式接收到“2”,但在您在regex101上演示的示例中没有接收到“345”。但是日期正则表达式工作得非常好!@rmahesh注意到在regex101示例中设置了e global flag。@ClasG我来自更多的统计背景,不是最精通编码的人。您能解释一下这意味着什么,以及为什么这可能会导致regex无法在PyCharm中运行吗?我不会说python,但搜索后您会发现。@GlasG谢谢,可以。将代码加载到PyCharm中时,请在您在regex101上演示的示例中,整数的正则表达式选择了“2”,但没有选择“345”。但是日期的正则表达式工作得非常好!@rmahesh注意,在regex101示例中设置了全局标志。@ClasG我来自更多的统计背景,不是最精通编码的人。您能解释一下这意味着什么吗为什么这可能会导致正则表达式不能在PyCharm中运行?我不会说python,但是搜索,你会找到的。@GlasG谢谢,可以。我需要捕获被空格包围的整数。在我在文章描述中给出的示例中,除了“/”或“.”之外的所有整数,不应该返回给我正在返回。我需要找出一种方法,用整数前后的空格捕获整数。我现在理解了你问题的第一部分,我仍然对第二部分感到困惑,但我怀疑streetturtle已经回答了你对该部分的要求。是的,Tom,streetturtle已经回答了该部分。他对t的回答整数几乎是完美的,只是在我在PyCharm上运行相同的东西后,它没有拾取他链接的示例中的最后一个整数。我需要捕获被空格包围的整数。在我在帖子描述中给出的示例中,除了“/”或“.”之外的所有整数,都不应该返回给我正在返回。我需要找出一种方法,在整数前后使用空格捕获整数。我现在理解了你问题的第一部分,我仍然对第二部分感到困惑,但我怀疑