0
我在VC++中使用正则表达式中的一个函数。这里是我的代码文件:regex_replace函数以不同的方式工作
#include "stdafx.h"
#include<regex>
#include<iostream>
#include<string>
using namespace std;
void test_regex_search(const std::string& input)
{
std::cout << " Initial string = " << input <<endl;
std::regex rgx("(^|\\W)\\d+([a-zA-Z]*)?[\\\-\\\\]?(\\d*)([a-zA-Z]*)?");
std::smatch match;
char start[200] = {0};
std::string repalcewith("");
if (std::regex_search(input.begin(), input.end(), match, rgx))
{
std::cout << "match[0] = " << match[0]<< '\n';
std::cout << "match[1] = " << match[1] << '\n';
}
else
std::cout << "No match\n";
std::regex_replace(&start[0],input.begin(),input.end(),rgx,repalcewith);
std::cout << "final string = "<<start << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
test_regex_search("HIGH STREET 4323HTY KM3.5 WINES ");
return 0;
}
执行后,输出出现这样的: 最终的字符串= HIGH STREET KM3葡萄酒
在“KM3.5”字这种特殊情况下为什么最终的字符串来了作为“KM3”,而我的正则表达式不承认“。”?它是在处理“。”作为空间或可能是这个原因的适当原因。 在此先感谢 Shashank
感谢您的回复。我的要求是删除完整的单词,如果它以数字开头并且只需通过正则表达式完成。特别是当表达式遇到“KM3.5”时,它应该保存这个完整的单词,因为它是以一个字符开始的。而目前的行为是将其转换为“KM3”,这与我的预期不同。我经历了你的建议,但如果我用“\\ b”替换“^ | \\ W”,则“KM3.5”的结果为“KM3”。这对我来说又是一个问题。 –
定义“单词”。 '\ W'类不认为'.'是一个单词字符。如果您的“单词”的定义与'[A-Za-z0-9 _] +'不同,那么您不能使用'\ W',但必须明确拼写非单词字符(根据您的定义)。 –