是否有正则表达式可以使用Python在字符串中的两个数字之间找到一个字母?
例如,给出一个像这样的字符串“ AAPL1809A170 ”我想再次提取 A ......给出“ XOM1809C123 “我想只提取C ......
为了解决我的问题,我刚尝试了这个正则表达式:“\ d {1} [A-Z] {1} \ d {1}”但它在上面给出了示例字符串中的9A1或9C1。
感谢您尽可能回复
答案 0 :(得分:3)
你可以使用积极的前瞻和积极的外观:
import re
strings = ["AAPL1809A170", "XOM1809C123"]
final_results = [re.findall('(?<=\d)[A-Z]{1}(?=\d)', s)[0] for s in strings]
输出:
['A', 'C']
答案 1 :(得分:3)
您可以使用捕获组告诉正则表达式引擎您希望它从字符串中提取的内容 - 它将作为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'
答案 2 :(得分:2)
您可以使用正则表达式(.*\d)([A-Z])(\d.*)
- 这将为您提供数字之间的精确一个字母。
>>> 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/非常方便测试正则表达式。
答案 3 :(得分:1)
您可以使用群组从匹配中提取您想要的内容:
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
。