Regex将格式模板替换为字符串,以便结果是格式化的字符串
Regex replace format template with a string so that the result is a formatted string
基本上我有以下内容:
- 输入字符串(如ABCDEFGHI)
- 输入模板(如XXX-XXX-XXX)
,我想看到的输出是ABC-DEF-GHI
我想象它是这样的"XXX-XXX-XXX".replace("regex", "ABCDEFGHI");
问题在于模板是动态的。它可以是XXX-XXX-XXX
或XX-XXXX-XXX
或任何其他可以包含任何特殊字符的组合,但要匹配的字符始终是X
。
模板不受长度或由特殊字符分隔的组数量的限制。即XX-X-X
和XXX-XXX-XXX-XXX-X
都是有效的模板,只要输入字符X的个数相同。
到目前为止,我有这个:"/^([^a-zA-Z0-9]*X){9}[a-zA-Z0-9]*$/"
,它将验证我的模板。
有人能解释一下吗?是否有一种方法可以用字符串中的一个字符替换模板中的一个匹配字符?
基本上你需要将你的简单模板转换成REGEX,你可以使用REGEX:
。创建替换:
- 用
\11\22\3
替换^X+(W)X+(W)X+$
- 这将把
XXX-XXX-XXX
转换成1-2-3
在这里解释演示
二世。创建匹配:(两步)
- 创建三个组:
- 用
(1)(2)(3)
替换^(X+)W(X+)W(X+)$
- 这将把
XXX-XXX-XXX
转换成(XXX)(XXX)(XXX)
在这里解释演示
- 用
- 将
X
替换为点(.
作为单个字符匹配),在上述操作之上- 这将把
(XXX)(XXX)(XXX)
转换成(...)(...)(...)
在这里解释演示
- 这将把
现在你可以使用新的匹配字符串(...)(...)(...)
和新的替换字符串1-2-3
与输入字符串ABCDEFGHI
,并得到ABC-DEF-GHI
解释演示在这里
注意:我假设你的模板将把输入字符串分成3部分,在
之间有2个(变量)特殊字符。更新:
如果模板有可变的部分,你必须提前创建你的匹配和替换模式:
使用正则表达式:W
对模板中的部件进行计数,然后创建匹配和替换模式。
相关文章:
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 为什么这个程序的结果是3 "born"?和 4 死
- 这里的字符串函数是什么意思
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 分配给浮点数的积分文字除法 - 为什么结果是错误的?
- C++初始化的结果是什么?
- 我的输出结果是 0 英寸C++.可能是什么问题
- 检查字符串是否是拉平德罗姆
- 为什么要 boost::p roperty_tree::write_json() 将整数值转换为字符串?这是不正确的
- 检查字符串是否是数字,然后将该数字转换为 int?
- 在C++中使用 fread() 来解释这个结果是什么?
- 为什么双算的结果是错误的?
- 是否可以动态检查文本字符串是否是 C++ 中给定类的成员?
- 为什么一个简单的C++程序会有错误的结果?是 #define 引起的吗?
- 字符* 到字符串 c++(结果不是预期的)
- C++ 字符串流值不正确?结果是 0?
- _popen结果是一个字符串:一个特殊情况
- Regex将格式模板替换为字符串,以便结果是格式化的字符串