0

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

我有一个应用程序使用具有不同模式的交换格式,例如

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

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

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

4

1 回答 1

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'
于 2012-10-06T20:39:42.577 回答