C++ C++;从文件中随机替换正则表达式

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

我想替换包含更多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: 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