【问题标题】:Python regular expressions ORPython 正则表达式或
【发布时间】:2012-01-26 10:22:33
【问题描述】:

假设我想要一个匹配“从我的 iPhone 发送”和“从我的 iPod 发送”的正则表达式。这样的表达式怎么写?

我尝试过这样的事情:

re.compile("Sent from my [iPhone]|[iPod]") 

但似乎不起作用。

【问题讨论】:

标签: python regex


【解决方案1】:
re.compile("Sent from my (iPhone|iPod)")

【讨论】:

  • 甚至是“从我的 iP(:?hone|[ao]d) 发送”,其中也包括 iPad。
  • @lapinkoira 输出什么?当它适用于提出问题的人和发现它的其他人时,您是否真的认为这值得投反对票,但不适用于您使用它的特定方式,与原始问题无关?
  • @lapinkoira 我的答案与iPhoneiPod 本身的字符串不匹配。它只会匹配 Sent from my iPhoneSent from my iPod,就像 OP 想要的那样。匹配的内容和捕获的内容是有区别的,OP 只询问匹配的内容。 re.compile("(iPhone|iPod)") 会在字符串Red iPhone 中找到匹配项,但我的答案没有,因为我的答案要求字符串在iPhoneiPod 之前有Sent from my 。顺便说一句,正则表达式不输出任何内容,所以我不确定你的意思。
  • 另一个答案只是禁止捕获该组,因此虽然我们的两个答案都给出了match.group(0) == 'Sent from my iPhone',但我的答案还允许您仅获取单独捕获的部分如果您愿意 使用match.group(1) == 'iPhone',而在另一个答案中使用match.group(1) 会抛出IndexError: no such group
  • @ChrisTonkinson :? 在您的(有用!)评论中应该是 ?:
【解决方案2】:
re.compile("Sent from my (?:iPhone|iPod)")

如果您需要捕获匹配项,请删除 ?:

仅供参考,您的正则表达式不起作用,因为您正在测试 i,P,h,o,n,e 中的一个字符或 i,P,o,d..中的一个字符。

【讨论】:

  • 不,他们正在测试“Sent from my”,然后是 i、P、h、o、n 或 e 字符之一; OR 字符 i、P、o 或 d 之一。 OR 的竖线是最上面的范围,左侧有“Sent from my”,但右侧没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多