簡體   English   中英

正則表達式在兩個數字python之間查找字母

[英]Regex to find letter between two numbers python

是否有正則表達式通過使用Python在字符串中兩個數字之間找到字母?

例如,給定一個像這樣的字符串“ AAPL1809A170 ”,我只想提取A ...,給定“ XOM1809C123 ”,我只想提取C ...

為了解決我的問題,我只是嘗試了此正則表達式:“ \\ d {1} [AZ] {1} \\ d {1}”,但上面的示例字符串提取了9A1或9C1。

多謝您的回覆

您可以使用正向先行和正向先行:

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

輸出:

['A', 'C']

您可以使用捕獲組來告訴正則表達式引擎確切地希望您從字符串中提取什么-它會作為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'

您可以使用正則表達式(.*\\d)([AZ])(\\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/非常方便測試正則表達式。

您可以使用組從匹配中提取所需內容:

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

該組是您放在括號()之間的任何內容,例如[AZ] ,然后打印該組。 由於僅指定了一組([AZ]) ,請使用print(match.group(1))打印匹配的字母。 在上述情況下,它將返回A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM