繁体   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