我对Python中的正则表达式有疑问。正则表达式来匹配Python中的几个字符串
可能的变化可以是
10小时,12周或7个工作日。
我想有我正则表达式像
string = "I have an 7 business day trip and 12 weeks vacation."
re.findall(r'\d+\s(business)?\s(hours|weeks|days)', string)
,这样我希望找到“7个工作日”和“12周”,但它返回无
我对Python中的正则表达式有疑问。正则表达式来匹配Python中的几个字符串
可能的变化可以是
10小时,12周或7个工作日。
我想有我正则表达式像
string = "I have an 7 business day trip and 12 weeks vacation."
re.findall(r'\d+\s(business)?\s(hours|weeks|days)', string)
,这样我希望找到“7个工作日”和“12周”,但它返回无
string = "I have an 7 business day trip and 12 weeks vacation."
print re.findall(r'\d+\s(?:business\s)?(?:hour|week|day)s?', string)
['7 business day', '12 weeks']
\d+\s(?:business\s)?(?:hour|week|day)s?
演示应解释如何工作的。你的原因不是因为它正在寻找不匹配的7 businessdays
。
但如果你不想接受business week/hour
,则需要进一步修改:
\d+\s(?:hour|week|(?:business)?day)s?
您需要调整您的正则表达式此:
>>> string = "I have an 7 business day trip and 12 weeks vacation."
>>> print re.findall(r'(\d+)\s*(?:business day|hour|week)s?', string)
['7', '12']
这个匹配后跟business day
或hour
或week
和任选任何数目到底。
类似@ anubhava的答案,但匹配“7个工作日”,而不是只是“7”。刚刚从\ d +后移至右括号到最后:
re.findall(r'(\d+\s*(?:business day|hour|week)s?)', string)
如果您不包含任何捕获组,那么're.findall'默认会返回整个匹配,所以括号不是必需的。 – TemporalWolf
\ d + \ S +(商业\ S)(小时|一周|天)■?
代码只有答案通常不如解释如何或为什么有帮助。此外,还有一个代码格式化程序('{}'按钮) – TemporalWolf
这不是代码片段,而是用于获取所需输出的正则表达式字符串。我本可以写下“你需要调整你的正则表达式”:但我认为这是相当暗示的。 – jazoora
这仍然不能解释**为什么**这是正确的答案,或**如何正则表达式的工作(或者,或者,为什么他们的正则表达式不)。这些很重要。注意接受的答案提供了一个解决方案,他的方法无法正常工作的原因以及测试对象的演示。通常我也会做一个细分,但是如果点击链接,Debuggex在做视觉细分方面做得非常出色。 – TemporalWolf
谢谢,我有正确的。但现在它返回没有数字的[(“business”,“day”),(“weeks”)]。 – Vicky
现在,如果没有'business',你需要*两个*空格字符。 – Biffen
你忘了匹配“business”和“12”之间的字符。 –