繁体   English   中英

使用Python替换正则表达式中的非字母数字字符

[英]Replacing non-alphanumeric characters in regex match using Python

我有一个文本文件(verilog),其中包含要修改的某些字符串序列(转义的标识符)。 在下面的示例中,我想找到任何以'\\'开头并以''结尾的组(任何可打印字符都可以位于两者之间)。 找到一个符合此条件的组后,我想用字母数字字符替换所有非字母数字字符(我并不在乎它们会被替换为什么字母数字)。

In[1]:  here i$ \$0me text to \m*dify
Out[1]: here i$ aame text to madify

我没有问题找到需要使用正则表达式替换的组。 但是,如果仅使用re.findAll(),则在修改匹配的组后,我将不再具有字符串中单词的位置来重建字符串。

有没有一种方法可以在分别修改每个匹配项时保留字符串中单词的位置?

注意:我以前在这里问过一个非常类似的问题,但是我简化了我的示例。 我认为编辑我现有的问题会使现有的评论和答案使将来的读者感到困惑。

我对上一个问题的回答仍然适用,但做了一些小的修改。 仅正则表达式更改。

由于这比较复杂,因此定义一个函数作为回调传递。

In [57]: def foo(m):
    ...:     return ''.join(x if re.match('[a-zA-Z]', x)\
                              else ('' if x == '\\' else 'a') for x in m.group()) 

现在,致电re.sub

In [58]: re.sub(r'\\.*?(?= |$)', foo, text)
Out[58]: 'here i$ aame text to madify'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM