Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除除特定组合以外的任何小写字符_Python_Regex_Regex Lookarounds - Fatal编程技术网

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](?应该是正确的答案