为什么我不能用这个python正则表达式去掉L?
我试图用python中的正则表达式消除整数末尾的Ls:为什么我不能用这个python正则表达式去掉L?,python,regex,Python,Regex,我试图用python中的正则表达式消除整数末尾的Ls: import re s = '3535L sadf ddsf df 23L 2323L' s = re.sub(r'\w(\d+)L\w', '\1', s) 但是,这个正则表达式甚至不会更改字符串。我也尝试过s=re.subr'\w\d+L\w',因为我认为可能可以捕获并删除L,但这也不起作用。\w=[a-zA-Z0-9] 换句话说,\w不包括空白字符。每个L位于单词的末尾,因此后面没有任何单词字符。也许你在找什么 您可以使用look-
import re
s = '3535L sadf ddsf df 23L 2323L'
s = re.sub(r'\w(\d+)L\w', '\1', s)
但是,这个正则表达式甚至不会更改字符串。我也尝试过s=re.subr'\w\d+L\w',因为我认为可能可以捕获并删除L,但这也不起作用。\w=[a-zA-Z0-9]
换句话说,\w不包括空白字符。每个L位于单词的末尾,因此后面没有任何单词字符。也许你在找什么
您可以使用look-behind断言
>>> s = '3535L sadf ddsf df 23L 2323L'
>>> s = re.sub(r'\w(?<=\d)L\b', '', s)
>>> s
'353 sadf ddsf df 2 232'
试试这个:
re.subr'?我不确定您首先要对这些\w做什么,但要匹配后跟L的一串数字,只需使用\d+L,要删除L,您只需将\d+部分放入捕获组中,这样您就可以对整个事件进行sub:
>>> s = '3535L sadf ddsf df 23L 2323L'
>>> re.sub(r'(\d+)L', r'\1', s)
'3535 sadf ddsf df 23 2323'
下面是正在运行的正则表达式:
(\d+)L
当然,这也会将123LBQ转换为123BQ,但我在您的示例或对问题的描述中没有看到任何东西表明这是可能的,或者您希望得到哪种可能的结果,所以…为什么不使用-IMO更可读的-generator表达式
我想L代表pythoncan u中的长整数,显示您的预期输出???@abarnert oops lol。。。我想说的是你发布的答案。。。但这一切都搞砸了:P愚蠢的帕伦斯:P+1对于最简单的解决方案,它几乎总是正确的
(\d+)L
>>> 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'