簡體   English   中英

為什么我不能用這個python正則表達式擺脫L?

[英]Why can’t I get rid of the L with this python regular expression?

我正在嘗試使用python中的正則表達式擺脫整數結尾處的Ls:

import re
s = '3535L sadf ddsf df 23L 2323L'
s = re.sub(r'\w(\d+)L\w', '\1', s)

但是,此正則表達式甚至不會更改字符串。 我還嘗試過s = re.sub(r'\\w\\d+(L)\\w', '', s)因為我認為也許可以捕獲和刪除L,但這也不起作用。

\\w = [a-zA-Z0-9_]


換句話說, \\w不包含空格字符。 每個L都在單詞的末尾,因此后面沒有任何“單詞字符”。 也許您正在尋找單詞邊界

re.sub(r'\b(\d+)L\b', '\1', s)

演示版

我不確定您首先想對這些\\w做什么,但是要匹配一串數字和一個L ,只需使用\\d+L ,然后刪除L即可將\\d+部分放在捕獲組中,以便您可以將其作為整個子對象使用:

>>> s = '3535L sadf ddsf df 23L 2323L'
>>> re.sub(r'(\d+)L', r'\1', s)
'3535 sadf ddsf df 23 2323'

這是實際的正則表達式:

(\d+)L

正則表達式可視化

Debuggex演示

當然,這也會將例如123LBQ轉換為123BQ ,但是我在您的示例或問題描述中看不到任何表明這樣做的可能或您想要的可能結果,所以……

您可以使用后置斷言

>>> s = '3535L sadf ddsf df 23L 2323L'
>>> s = re.sub(r'\w(?<=\d)L\b', '', s)
>>> s
'353 sadf ddsf df 2 232'

(?<=\\d)L斷言L以數字開頭,在這種情況下用null替換''

試試這個: re.sub(r'(?<=\\d)L', '\\1', s)

它使用后向查找來找到一個數字,后跟一個“ L”。

為什么不使用IMO更具可讀性的generator expression

>>> s = '3535L sadf ddsf df 23L 2323L'
>>> ' '.join(x.rstrip('L') if x[-1:] =='L' and  x[:-1].isdigit() else x for x in s.split())
'3535 sadf ddsf df 23 2323'

暫無
暫無

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

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