gpt4 book ai didi

C++ 正则表达式在第一个空格后拆分

转载 作者:行者123 更新时间:2023-11-30 05:19:52 24 4
gpt4 key购买 nike

我有一个字符串如下:

{ <object> waves   ;              big    yellow       flowers ;          slugs       ; }

我需要想出一个正确的正则表达式来在第一个空格之后拆分它,然后只用分号拆分,这样在一个 vector 中,它看起来如下:

s.at(0) = <object>
s.at(1) = waves
s.at(2) = big yellow flowers
s.at(3) = slugs

我最接近的只是用分号将它分开,但是 <object>波最终被读成一行。

编辑:这是我正在使用的拆分函数

vector<string> split(const string &input, const string &regex, bool delim = true) {
std::regex re(regex);

std::sregex_token_iterator first, last;
if (delim) {
first = sregex_token_iterator{input.begin(), input.end(), re};
} else {
// the -1 removes the delimiter
first = sregex_token_iterator{input.begin(), input.end(), re, -1};
}
return vector<string>(first, last);
}

最佳答案

编辑:由于您更新了您的输入,下面的建议将在一些预处理后起作用:您需要删除过多的空格和前导/尾随大括号。

std::regex r(R"(^[{\s]+|[}\s]+$|\s*(;)\s*|(\s)+)");

并替换为 "$1$2"。查看regex demo .

你只能通过匹配来实现,而不是拆分。正则表达式是

^\S+|\b[^;]+

参见 regex demo

它匹配:

  • ^\S+ - 字符串开头的 1+ 个非空白字符
  • | - 或-\b[^;]+ - 单词边界后跟除 ; 之外的 1+ 个字符。它应该有效,因为元素以数字/字母开头(根据您的评论)。

示例 C++ 代码:

#include <string>
#include <iostream>
#include <regex>
using namespace std;

int main() {
std::regex r(R"(^\S+|\b\w[^;]*)");
std::string s = "<start> sunlight; small red flowers; trees;";
for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
i != std::sregex_iterator();
++i)
{
std::smatch m = *i;
std::cout << m.str() << '\n';
}
return 0;
}

参见 C++ demo

关于C++ 正则表达式在第一个空格后拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com