【问题标题】:Regex replace format template with a string so that the result is a formatted string正则表达式用字符串替换格式模板,以便结果是格式化的字符串
【发布时间】:2013-03-04 23:21:30
【问题描述】:

基本上我有以下几点:

  • 输入字符串(例如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]*$/",它将验证我的模板。

任何人都可以对此有所了解吗?有没有办法用字符串中的一个字符替换模板中的一个匹配字符?

【问题讨论】:

  • 你用什么语言做这个?根据引擎的不同,使用正则表达式可能会更容易。
  • PHP 和 C++ 都需要处理这个问题。
  • 如果有人需要正则表达式帮助,这是一个很好的资源:@​​987654321@

标签: php c++ regex templates string-formatting


【解决方案1】:

基本上,您需要将简单模板转换为 REGEX,您可以使用 REGEX 进行此操作:

我。 创建替换

  • 搜索正则表达式^X+(\W)X+(\W)X+$替换为\\1\1\\2\2\\3
  • 这会将XXX-XXX-XXX 转换为\1-\2-\3 explained demo here

二。 创建匹配:(两步)

  1. 创建三个组:
    • 搜索正则表达式^(X+)\W(X+)\W(X+)$替换为(\1)(\2)(\3)
    • 这会将XXX-XXX-XXX 转换为(XXX)(XXX)(XXX) explained demo here
  2. X 替换为点(. 充当单个字符匹配),通过上述操作

现在您可以将新匹配字符串 (...)(...)(...) 和新替换字符串 \1-\2-\3 与输入字符串 ABCDEFGHI 一起使用并获得 ABC-DEF-GHI explained demo here

注意:我假设您的模板会将输入字符串分成 3 部分,中间有 2 个 (变量) 特殊字符

更新:

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

【讨论】:

  • 对不起,我的问题没有具体说明,但它必须能够同时满足 3 个以上的组以及超过 9 个字符。
猜你喜欢
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 2019-11-12
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多