【问题标题】:Regex to find letter between two numbers python正则表达式查找两个数字之间的字母python
【发布时间】:2018-03-07 22:31:22
【问题描述】:

是否有正则表达式可以使用 Python 查找字符串中两个数字之间的字母?

例如, 给定一个像这样的字符串 "AAPL1809A170" 我只想提取 A...再次,给定 " XOM1809C123" 我只想提取 C...

为了解决我的问题,我刚刚尝试了这个正则表达式:“\d{1}[A-Z]{1}\d{1}”,但它提取了上面给出的示例字符串 9A1 或 9C1。

如果可能,感谢您回复

【问题讨论】:

  • 您应该能够使用捕获组来提取您需要的字母。

标签: python regex string


【解决方案1】:

您可以使用积极的前瞻和积极的后瞻:

import re
strings = ["AAPL1809A170", "XOM1809C123"]
final_results = [re.findall('(?<=\d)[A-Z]{1}(?=\d)', s)[0] for s in strings]

输出:

['A', 'C']

【讨论】:

  • 嘿,谢谢!这个正则表达式 (?
  • @AndreaFerrante 很高兴为您提供帮助!
  • {1} 是一个实际上毫无意义的量词。
  • @CAustin 为什么?!
  • @AndreaFerrante 因为这和不写它是一样的。 [A-Z]{1} 匹配与 [A-Z] 相同的输入。
【解决方案2】:

您可以使用捕获组来准确地告诉正则表达式引擎您希望它从字符串中提取什么 - 它将作为 Match Object 返回:

>>> import re
>>> re.search('\d([A-Z])\d', 'XOM1809C123')
<_sre.SRE_Match object at 0x7f6e597b54e0>
>>> re.search('\d([A-Z])\d', 'XOM1809C123').group(0)
'9C1'
>>> re.search('\d([A-Z])\d', 'XOM1809C123').group(1)
'C'

【讨论】:

  • 非常感谢您的回复。
【解决方案3】:

您可以使用正则表达式 (.*\d)([A-Z])(\d.*) - 这将在数字之间为您提供准确的 ONE Alphabet。

>>> import re
>>> re.search('(.*\d)([A-Z])(\d.*)', 'XOM1809C123').group(2)
'C'
>>> re.search('(.*\d)([A-Z])(\d.*)', 'AAPL1809A170').group(2)
'A'

我发现http://rubular.com/ 非常方便测试正则表达式。

【讨论】:

    【解决方案4】:

    您可以使用组从匹配中提取您想要的内容:

    str = 'AAPL1809A170'
    match = re.search(r"\d{1}([A-Z])\d{1}", str)
    print(match.group(1))
    

    该组是您在括号 () 之间放置的任何内容,例如 [A-Z],然后您打印该组。由于只指定了一组([A-Z]),因此使用print(match.group(1)) 打印匹配的字母。在上述情况下,这将返回 A

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多