正则表达式替换任何数字或任何具有所需字符的字符的任何出现

时间:2012-10-06 20:08:20

标签: regex masking

我需要帮助整理模式生成器的解决方案。

我有一个使用不同模式的交换格式的应用程序 像

<00> 00350-ABA-0NZ0:AXYA-11/11/2012等,

具有由“ - ”,“。”,“:”和“/”分隔的数字和字母数字数据。现在我想要做的是将其转换为通用格式,如 nnnnn-ccc-nccn:cccc-nn / nn / nnnn其中n是数字,c是字符。

任何帮助/建议/想法。 。 。 谢谢 CSK。

1 个答案:

答案 0 :(得分:0)

您不能在单个正则表达式中进行条件替换。您需要分两步完成(这是一个Python示例):

>>> s = "00350-ABA-0NZ0:AXYA-11/11/2012"
>>> s = re.sub(r"[A-Za-z]", "c", s)
>>> s
'00350-ccc-0cc0:cccc-11/11/2012'
>>> s = re.sub(r"\d", "n", s)
>>> s
'nnnnn-ccc-nccn:cccc-nn/nn/nnnn'

你需要这样做 - 我只是在你的评论中看到你的解决方案,如果再看一遍,你会发现它不起作用。提示:结果你会得到'ccccc-ccc-cccc:cccc-cc/cc/cccc' ......

另一种解决方案是使用回调函数来检查匹配并相应地选择替换字符串。但那不再是纯粹的正则表达式了:

>>> def replace(m):
...     return "n" if m.group(0).isdigit() else "c"
...
>>> s = re.sub(r"[A-Za-z0-9]", replace, s)
>>> s
'nnnnn-ccc-nccn:cccc-nn/nn/nnnn'