我正在尝试找到以下模式的匹配项。 我想找到以下匹配项:
May'10 - Jan'11
May ' 10 - Jan ' 11
我能够在某种程度上找到第一场比赛。我的正则表达是:
\b([\w]{3,8}'[\s\d]{1,4})
答案 0 :(得分:1)
您几乎就在那里,只需在<space>*
'
\b([\w]{3,8} *'[\s\d]{1,4})\b
更新
\b([\w]{3,8} *'[\s\d]{1,4})\b *- *([\w]{3,8} *'[\s\d]{1,4})\b
我添加了<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}))
如果您想使用-
捕获对,请尝试此操作。请参阅演示。
答案 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
希望这会有所帮助:)