如何在c++中成对显示regex输出

How to show regex output in pair in c++?

本文关键字:显示 regex 输出 c++      更新时间:2023-10-16

我不知道这是否有意义,但它就在这里
有没有一种方法可以让我每次从正则表达式结果中获得两个单词
supose我有一个文本文件,其中包含如下字符串:

Alex Fenix是一名工程师,在福特汽车公司工作。他的个人ID是<123456>;等等…

基本上,如果我使用w,我会得到一个列表:

Alex
Fenix
is 
an
Engineer
and etc 

它们都用空格和标点符号隔开我想问的是,是否有一种方法可以列出这样的列表:

Alex Fenix
is an
Engineer who
works for
Ford Automotive
Company His
Personal ID
is 123456

如何实现这样的格式
这可能吗?或者我应该把第一个结果存储在一个数组中,然后遍历它们并创建第二个列表吗
顺便说一句,请注意,Alex Fenix项目实际上是地图或任何类似容器的抽象
我问这个问题的原因是,我想看看是否有任何方法可以直接读取一个文件,并在上面应用regex,然后在没有任何进一步处理开销的情况下获得第二个列表(我的意思是读取一个映射或字符串,然后遍历它们,创建成对的令牌,然后继续执行所需的操作)

尝试此regex

w w

它将匹配任何后面跟着空格的单词和另一个单词。

尽管您可以在不使用regex的情况下相对容易地实现这样的格式。举个例子:

#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
int main() {
    std::string s("Alex Fenix is an Engineer who works for Ford Automotive Company. His Personal ID is <123456>");
    // Remove any occurences of '.', '<' or '>'.
    s.assign(begin(s), std::remove_if(begin(s), end(s), [] (const char c) {
        return (c == '.' || c == '<' || c == '>');
    }));
    // Tokenize.
    std::istringstream iss(s);
    std::string t1, t2;
    while (iss >> t1 >> t2) {
        std::cout << t1 << " " << t2 << std::endl;
    }
}

输出:

Alex Fenix
is an
Engineer who
works for
Ford Automotive
Company His
Personal ID
is 123456