C++ C++;从文件中随机替换正则表达式
我想替换包含更多ID的文件中的ID并使其随机。我真的很难度过难关。有什么想法吗 ID_List.txt:C++ C++;从文件中随机替换正则表达式,c++,regex,c++11,C++,Regex,C++11,我想替换包含更多ID的文件中的ID并使其随机。我真的很难度过难关。有什么想法吗 ID_List.txt: Begin Name: Person Phone;type=Main:+1 234 567 890 ID;Type=Main:132dfi987416 End Begin Name: OtherPerson Phone;type=Main:5598755131 ID;Type=Main:549875413213 ID;Type=Seco:987987565oo2 End Begin Name
Begin
Name: Person
Phone;type=Main:+1 234 567 890
ID;Type=Main:132dfi987416
End
Begin
Name: OtherPerson
Phone;type=Main:5598755131
ID;Type=Main:549875413213
ID;Type=Seco:987987565oo2
End
Begin
Name: TheOtherPerson
Phone;type=Main:+58 321 654 987
ID;Type=Main:6565488oop24
ID;Type=Seco:7jfgi0897540
ID;Type=Depr:6544654650ab
End
我必须使用C++,并且认为正则表达式可以是我的出路。因此,我的
正则表达式:
(?<=ID;Type=....:).*$
(?一个选项是使用捕获组,而不是使用查找。在替换中,使用第一个捕获组$1
使用regex\u replace
^(ID;Type=[^:]+:).*
解释
^
字符串的开头
(
Capturegroup 1
ID;Type=
按字面匹配
[^:::+:
将除以外的任何字符匹配1次以上,然后匹配:
)
关闭组
*
匹配任意字符0+次
|
比如说
#include <iostream>
#include <regex>
int main (int argc, char* argv[])
{
std::cout << std::regex_replace("ID;Type=Main:132dfi987416", std::regex("^(ID;Type=[^:]+:).+"), "$1REPLACEMENT");
}
感谢regex选项,但我需要更改它后面的字符串,而不是第一组或全部内容。我是正确的还是我不明白您的意思。@KotjengOren模式匹配整个字符串,在组1中捕获您想要保留的内容,并匹配您想要删除的内容。在替换中,您使用组1,然后是您想要的内容要在其后面添加。在演示链接的底部,您可以看到替换后的结果。@KotjengOren查看此页的示例
#include <iostream>
#include <regex>
int main (int argc, char* argv[])
{
std::cout << std::regex_replace("ID;Type=Main:132dfi987416", std::regex("^(ID;Type=[^:]+:).+"), "$1REPLACEMENT");
}
ID;Type=Main:REPLACEMENT