簡體   English   中英

您如何找到 substring 的所有實例,后跟一定數量的動態字符?

[英]How do you find all instances of a substring, followed by a certain number of dynamic characters?

我正在嘗試查找特定子字符串的所有實例(以 a.b2 為例),並在 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ 匹配后返回 4 個字符。 以下 4 個字符始終是動態的,可以是任何字母/數字/符號。

我試過搜索,但似乎提出的類似問題正在請求某些字符的幫助,這些字符可以輕松拆分 substring,但由於我正在尋找的字符是動態的,我不確定如何編寫正則表達式。

使用正則表達式時,可以使用“。” 動態匹配任何字符。 使用{number}指定要匹配多少個字符,並使用(.{number})中的括號指定應捕獲匹配以供以后使用。

>>> import re
>>> s = "a!b2foobar a!b2bazqux a!b2spam and eggs"
>>> print(re.findall("a!b2(.{4})", s))
['foob', 'bazq', 'spam']

如果您只是在尋找如何使用Regex獲取以下 4 個字符,那么您可能希望使用大括號指示符來匹配數量:'{}'。

他們 go 在這里的帖子中有更詳細的信息,但基本上你會做[aZ][0-9]{X,Y}(.{X,Y}) ,其中 X 到 Y 是你的字符數尋找(在您的情況下,您只需要{4} )。


解決這個問題的一個更Pythonic的方法是使用字符串切片,然而索引 function。

例如。 給定一個 input_string,當您使用index在索引 i 處找到 substring 時,您可以使用input_string[i+len(sub_str):i+len(sub_str)+4]來獲取這些特殊字符。

舉個例子,

input_string = 'abcdefg'
sub_str = 'abcd'
found_index = input_string.index(sub_str)
start_index = found_index + len(sub_str)
symbol = input_string[start_index: start_index + 4]

輸出(顯示它也適用於 <4): efg

索引還允許您為搜索提供開始和結束索引,因此如果您想為每個子字符串查找它,也可以在循環中使用它,搜索索引的開始是上一個找到的索引 + 1。

import re
print (re.search(r'a!b2(.{4})')).group(1))

.{4}匹配除special characters group(0)是搜索字符串的完全匹配。 您可以在此處閱讀有關組id的信息。

暫無
暫無

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

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