使用正则表达式替换格式模板为字符串,以便结果是一个格式化的字符串。

3

基本上我有以下内容:

  • 输入字符串(例如 ABCDEFGHI)
  • 输入模板(例如 XXX-XXX-XXX)

我想要看到的输出是 ABC-DEF-GHI

我想像它会变成这样:"XXX-XXX-XXX".replace("regex", "ABCDEFGHI");

问题在于模板是动态的。它可以是 XXX-XXX-XXXXX-XXXX-XXX 或包括任何特殊字符但要匹配的字符始终为X的其他组合。

模板的长度或由特殊字符分隔的组数没有限制。 即 XX-X-XXXX-XXX-XXX-XXX-X 都是有效的模板,只要 X 的数量与输入字符相同即可。

到目前为止,我有这个: "/^([^a-zA-Z0-9]*X){9}[a-zA-Z0-9]*$/" 它将验证我的模板。

有人可以解释一下吗?有没有一种方法可以用字符串中的一个字符替换模板中的一个匹配字符?


2
你用什么语言做这个?根据引擎的不同,可能更容易使用正则表达式之外的方法来完成它。 - Nick
PHP和C++都需要处理这个。 - Goran
如果有人需要正则表达式的帮助,这是一个很好的资源可以玩耍:http://regexr.com/ - Goran
1个回答

1

基本上,您需要将简单的模板转换为正则表达式,并使用正则表达式进行此操作:

I. 创建替换

  • 搜索正则表达式^X+(\W)X+(\W)X+$,替换为\\1\1\\2\2\\3
  • 这将把XXX-XXX-XXX转换为\1-\2-\3在此处解释演示

II. 创建匹配:(两个步骤)

  1. 创建三个组:
    • 搜索正则表达式^(X+)\W(X+)\W(X+)$,替换为(\1)(\2)(\3)
    • 这将把XXX-XXX-XXX转换为(XXX)(XXX)(XXX)在此处解释演示
  2. 在上述操作中,用点号(.表示单个字符匹配)替换X

现在,您可以使用新的匹配字符串(...)(...)(...)和新的替换字符串\1-\2-\3与输入字符串ABCDEFGHI一起使用,并获得ABC-DEF-GHI在此处解释演示

注意:我假设您的模板将输入字符串分成3个部分,其中每两个是(可变)特殊字符。

更新:

如果模板有可变部分,则必须提前创建匹配和替换模式:
使用正则表达式:\ W 计数模板中的部分,然后创建您的匹配和替换模式。


抱歉,我的问题没有明确说明,但它需要能够满足超过3个组以及超过9个字符的需求。 - Goran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接