首页 > 解决方案 > 如何在不添加转义字符的情况下让 python 子进程运行正则表达式模式?

问题描述

我正在尝试使用基本的正则表达式模式从 python3 运行定位。

subprocess.run( ['locate', '-r', '\.[^\~]$'] )

但是 subprocess 正在向正则表达式字符串添加转义字符。这似乎导致它破裂。

完成的过程报告它运行了正则表达式字符串:

'\\.[^\\~]$'

如何阻止它转义正则表达式字符串?

标签: regexpython-3.xsubprocessescapinglocate

解决方案


所以这个问题是无效的。但答案是对不同问题的回答,具有启发性。

这种模式有效

'.*[^~]$'

正如@Wiktor 在他上面的评论中所说,没有必要逃避我一开始就逃脱的字符。

困惑在于基本的 bash 正则表达式有多简单。在这方面,上述模式也不像看起来那样。

.* 并不意味着像往常一样找到所有东西。* 靠它自己意味着找到一切。这 。只匹配一个点。所以 .* 意味着找到带有 . 的东西。其次是任何东西。

更准确地说,我使用的实际模式更像这样:

'abc.*[^~]$'

... 查找名称以 abc 开头的所有文件。并且以任何结尾,而不是〜。

奇怪的是,这似乎不起作用:

'^abc.*[^~]$'

推荐阅读