C ++ Случайная регулярное выражение заменить из файла - PullRequest
2 голосов
/ 18 апреля 2020

Я хочу заменить идентификатор из файла, содержащего еще много идентификаторов, и сделать его случайным. Я действительно изо всех сил пытаюсь пройти это. Любая идея?

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=....:).*$

C ++:

#include <iostream>
#include <math>
#include <string>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <regex>
#include <iterator>

using namespace std;

string in_file;
srand (time(NULL));
void write();
int randomizer();

int main() {
  int a,b,c,x,y,z,n;

  cout << "Input File: "; getline(cin, in_file);    
  return 0;
}

void write() {
  fstream source;
  source.open(in_file.c_str());
  ? CODE HERE ?
}

int randomizer (){
  int x;
  X = rand() % 10 + 0;
  return x;
}

1 Ответ

1 голос
/ 18 апреля 2020

Один из вариантов - использовать группу захвата, а не использовать вид сзади. При замене используйте первую группу захвата $1, используя regex_replace

^(ID;Type=[^:]+:).*

Объяснение

  • ^ Начало строки
  • ( Захват группа 1
    • ID;Type= Совпадение буквально
    • [^:]+: Совпадение с любым символом, кроме : 1+ раз, затем совпадение :
  • ) Закрыть группу
  • .* Совпадение с любым символом 0+ раз

Regex demo | C ++ demo

Например

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...