我试图在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可能被捕获并被删除,但这也不起作用。
答案 0 :(得分:2)
\w
= [a-zA-Z0-9_]
换句话说,\w
不包含空格字符。每个L
都位于单词的末尾,因此后面没有任何“单词字符”。也许你在寻找word boundaries?
re.sub(r'\b(\d+)L\b', '\1', s)
答案 1 :(得分:2)
我不确定您首先尝试对这些\w
做什么,但要匹配一串数字后跟L
,只需使用{{1}并且要删除\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
转换为123LBQ
,但我在您的示例或您对问题的描述中没有看到任何表明这是可行的,或者哪个你可能想要的结果,所以......
答案 2 :(得分:1)
您可以使用后面的断言
>>> 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 ''
答案 3 :(得分:1)
试试这个:
re.sub(r'(?<=\d)L', '\1', s)
这使用lookbehind来找到一个数字后跟一个“L”。
答案 4 :(得分:1)
为什么不使用-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'