Python 删除除特定组合以外的任何小写字符
我有这个字符串:Python 删除除特定组合以外的任何小写字符,python,regex,regex-lookarounds,Python,Regex,Regex Lookarounds,我有这个字符串:azjf8ee7Ldoge\n Hmeqze=AZ12D Fs\nsdfz14eZe148r 我想匹配所有小写字符,除非它是一个e后跟一个数字(e\d),或者是一个反斜杠后跟一个n(\\n)。 根据我在这里找到的答案: 我设法找到了一个解决方案:(?!(e\d| \\n))[a-z],除了它匹配反斜杠后面的n。 如何排除前面带有反斜杠的n匹配?如果要避免匹配\n,则可以在正则表达式中添加一个否定的前瞻断言: (?!e\d|\\n)[a-z](?<!\\n) (?!e
azjf8ee7Ldoge\n Hmeqze=AZ12D Fs\nsdfz14eZe148r
我想匹配所有小写字符,除非它是一个e后跟一个数字(
e\d
),或者是一个反斜杠后跟一个n(\\n
)。根据我在这里找到的答案:
我设法找到了一个解决方案:
(?!(e\d| \\n))[a-z]
,除了它匹配反斜杠后面的n
。如何排除前面带有反斜杠的
n
匹配?如果要避免匹配\n
,则可以在正则表达式中添加一个否定的前瞻断言:
(?!e\d|\\n)[a-z](?<!\\n)
(?!e\d |\\n)[a-z](?)?
(?是反向查找断言,可确保在匹配[a-z]后,\n
在前一位置
在您的匹配范围内。要保留任何e
后面和\n
两个字符序列,并在其他上下文中删除任何小写ASCII字母,您可以使用
re.sub(r'(e\d|\\n)|[a-z]', r'\1', text)
[a-z](?<!e(?=\d))(?<!\\n)
re.sub(r'[a-z](?<!e(?=\d))(?<!\\n)', '', text)
见
详细信息
(e\d |\\n)
-匹配并捕获到组1(使用替换模式中的\1
占位符)中的e
和一个单个数字或\
和n
字符
|
-或
[a-z]
-一个小写ASCII字母
\1
恢复结果中捕获的值
如果你想玩围观游戏,你可以使用
re.sub(r'(e\d|\\n)|[a-z]', r'\1', text)
[a-z](?<!e(?=\d))(?<!\\n)
re.sub(r'[a-z](?<!e(?=\d))(?<!\\n)', '', text)
[a-z](?
看
[a-z](?模式与任何ASCII小写字母([a-z]
)匹配,该字母后面没有数字((?),前面没有n
((?)。您可以匹配字符a-z并使用查找框:
(?!e\d)[a-z](?<!\\[a-z])
(?!e\d)[a-z](?)?
部分地
(?!e\d)
负向前看,断言右边不是紧跟数字的e
[a-z]
匹配字符a-z
(?负回溯,断言左侧不是紧跟字符a-z的\
re.findall(r'e\d |\\n |([a-z]),text)
?或者你正在替换?比如re.sub(r'(e\d |\\n)|[a-z]',r'\1',text)
?@WiktorStribiżew,我实际上正在替换..比如re.sub r'(e\d | | n)|[a-z]',r'\1',text)
,WiktorStribi,谢谢你的回复抱歉,我在我的答案中添加了另一个基于查找的解决方案。我认为正确的答案应该是:(?!(e\d\n))[a-z](?因为您建议的答案仍然匹配e,后面跟一个数字是,(?!e\d\n)[a-z](?应该是正确的答案