LeetCode 正規表示式(Python3)

2021-10-19 18:07:14 字數 2710 閱讀 6845

請你來實現乙個 atoi 函式,使其能將字串轉換成整數。

這道題如果用到了正規表示式會很簡單實現:

class

solution

:def

myatoi

(self, s:

str)

->

int:

return

max(

min(

int(

*re.findall(

'^[\+\-]?\d+'

, s.lstrip())

),2**

31-1)

,-2**

31)

拆開後可更直觀地理解:

import re

class

solution

:def

myatoi

(self,

str:

str)

->

int:

int_max =

2147483647

int_min =

-2147483648

str=

str.lstrip(

)#清除左邊多餘的空格

num_re = re.

compile

(r'^[\+\-]?\d+'

)#設定正則規則

num = num_re.findall(

str)

#查詢匹配的內容

num =

int(

*num)

#由於返回的是個列表,解包並且轉換成整數

return

max(

min(num,int_max)

,int_min)

#返回值

這裡面用到了正規表示式的findall函式,它返回的是乙個列表(如列表['123456']),解包成整數需要用到num = int(*num)。(不支援多個列表元素解包成乙個整數

這裡面地compile函式內容中^代表匹配字串的開頭,這樣無論如何只會返回單一元素的列表,即從開頭開始匹配的字串數字。

import re

class

solution

:def

romantoint

(self, s:

str)

->

int:

dic_list=

pp=re.

compile

("m|cm|d|cd|c|xc|l|xl|x|ix|vi|v|iv|i"

) lst_s=pp.findall(s)

num=

0for i in

range

(len

(lst_s)):

num+=dic_list[lst_s[i]

]return num

這個就很簡單了,直接從開頭查詢所有出現的字元然後轉成數字做加法。用到的方法也是findall,只是不是從開頭查詢,沒有^,而是查詢所有。

給定乙個經過編碼的字串,返回它解碼後的字串。

編碼規則為: k[encoded_string],表示其中方括號內部的 encoded_string 正好重複 k 次。注意 k 保證為正整數。

你可以認為輸入字串總是有效的;輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。

此外,你可以認為原始資料不包含數字,所有的數字只表示重複的次數 k ,例如不會出現像 3a 或 2[4] 的輸入。

示例 1:

輸入:s = 「3[a]2[bc]」

輸出:「aaabcbc」

所有需要通過判斷字串來獲取最終值的題目都可以嘗試一下正規表示式的方法,因為它對於查詢字串是很全能的。這道題的解:

import re

class

solution

:def

decodestring

(self, s:

str)

->

str:

deff

(m):

return

int(m.group(1)

)* m.group(2)

while

'['in s:

s = re.sub(r'(\d+)\[([a-za-z]*)\]'

, f, s)

return s

這裡用到的是字串的替換,用到的函式是re.sub(pattern, repl, string, count=0),while迴圈同時可以替換成if '[' in s,這是因為re.sub()直接替換整段中的所有出現的內容。值得注意的是這道題中方法將替換的字串變為了乙個函式f,而在這之中python是可以讓數字直接與字串相乘的,這種使用可以記下來,如此一來每一次替換都會直接轉換成合適的陣列。

還需要注意的是不要弄錯成group(0)了,它返回的是所有group

leetcode 10 300 正規表示式 py

以s aab p c a b 來說明整個的過程 確定dp陣列的第一行,如果遇到了 只要判斷其對應的前面兩個元素的dp值 注意 我們無需判斷p裡面的第乙個值是否為 如果為 那肯定匹配不到為fasle,原陣列正好是fasle,所以直接從2開始判斷即可 for j in range 2,n if p j ...

正規表示式 py爬蟲篇

re.match試著從字串的起始位置匹配乙個模式,若不能從起始位置匹配成功,match 就返回none.import re content hello 123 4567 world this demo res re.match hello s d d d s d s w sdemo content ...

Leetcode 正規表示式匹配

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...