正则表达式匹配以下模式的所有组合(mm'年)

时间:2015-01-30 06:55:16

标签: python regex

我正在尝试找到以下模式的匹配项。 我想找到以下匹配项:

May'10 - Jan'11
May ' 10 - Jan ' 11

我能够在某种程度上找到第一场比赛。我的正则表达是:

\b([\w]{3,8}'[\s\d]{1,4})

4 个答案:

答案 0 :(得分:1)

您几乎就在那里,只需在<space>*

之前添加'
\b([\w]{3,8} *'[\s\d]{1,4})\b

DEMO

更新

\b([\w]{3,8} *'[\s\d]{1,4})\b *- *([\w]{3,8} *'[\s\d]{1,4})\b

DEMO

我添加了<space>*而不是\s*,因为\s也会与换行符匹配。

import re
p = re.compile(ur'\b([\w]{3,8} *\'[\s\d]{1,4})\b *- *([\w]{3,8} *\'[\s\d]{1,4})\b', re.MULTILINE)
test_str = u"May'10 - Jan'11\nMay ' 10 - Jan ' 11"
re.findall(p, test_str)

答案 1 :(得分:1)

\b([\w]{3,8}\s*'[\s\d]{1,4})

试试这个。看看演示。

https://regex101.com/r/zM7yV5/15

import re
p = re.compile(r'\b([\w]{3,8}\s*\'[\s\d]{1,4})', re.MULTILINE)
test_str = "May'10 - Jan'11\nMay ' 10 - Jan ' 11"

re.findall(p, test_str)

(\b(?:[\w]{3,8}\s*'[\s\d]{1,4})\s*-\s*(?:[\w]{3,8}\s*'[\s\d]{1,4}))

如果您想使用-捕获对,请尝试此操作。请参阅演示。

https://regex101.com/r/zM7yV5/17

答案 2 :(得分:0)

\b(\w{3,8}\s?'\s?\d{1,4})

This显式尝试匹配'字符周围的空格。这样你可以明确地匹配年份的数字(否则,你的表达式会接受类似"May' "(四个尾随空格)的东西)。而且您不需要在字符集中放置字符类。

如果你想匹配整个范围,你可以复制它并在其间加一个连字符:

(\w{3,8}\s?'\s?\d{1,4})\s*-\s*(\w{3,8}\s?'\s?\d{1,4})

答案 3 :(得分:0)

如果空格是这里唯一的停止点,你可以将它们从图片中取出然后像这样使用正则表达式...

<强>代码:

import re 

s1 = """May'10 - Jan'11"""
s2 = """May ' 10 - Jan ' 11"""
pattern = re.compile("""\w{3}\'\d\d\-\w{3}\'\d\d""")
print True if re.match(pattern, s2.replace(" ", "")) else False
print True if re.match(pattern, s2.replace(" ", "")) else False

<强>输出:

True
True

希望这会有所帮助:)