我在python上测试一些正则表达式。以下结果与任何内容都不匹配。我想匹配" Turkey
"但它甚至没有回归。我花了差不多一个小时就不知道为什么它不起作用了!
import re
regex = r'\s*\(aka\s(.*)\s((?:19|20)[0-9][0-9])'
line = " (aka Turkey (1955)) (USA) (short title)"
match = re.search(regex,line)
if match:
print match.groups()
答案 0 :(得分:2)
r'\s*\(aka\s(.*)\s((?:19|20)[0-9][0-9])'
的问题在于你不会在一年中逃脱括号。如果您使用:r'\s*\(aka\s(.*)\s*\((?:19|20)[0-9][0-9]\)'
,则会匹配"土耳其",因此我建议您使用r'\s*\(aka\s([^\s]*)\s*\((?:19|20)[0-9][0-9]\)'
之类的内容。
答案 1 :(得分:1)
你可以这样做:
^\s*\([^\s]*\s+
Turkey
与([^\s]+)
之前的部分匹配
Turkey
匹配\s+
并将其放入已捕获的组中,之后>>> line = " (aka Turkey (1955)) (USA) (short title)"
>>> re.search(r'^\s*\([^\s]*\s+([^\s]+)\s+', line).group(1)
'Turkey'
匹配一个或多个空格
示例:强>
tabBarCtr.moreNavigationController.delegate = self
tabBarController.moreNavigationController.viewControllers.first?.title = ""
答案 2 :(得分:1)
改变你的一点点:
而不是(.*)
使用([^\(]*?)\s*
这会捕捉到开头(
甚至多个单词的所有内容。
你忘记在年度组之前逃离开幕式(
。
regex = r'\s*\(aka\s*([^\(]*?)\s*\((?:19|20)[0-9][0-9])'
# --------------
然而,要使用更简单的模式,并考虑到Wolf的评论,并且认为像您试图捕获的标题一般将不止一个单词,您可以使用:
regex = r'\(aka\s*([^\(]*?)\s*\('
# or:
regex = r'\(aka\s*([\w\s]*?)\s*\('