2013-08-21 22 views
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

回答

0

.匹配\W在您的正则表达式开始。您可能需要使用\b代替(^|\W)

+0

感谢您的回复。我的要求是删除完整的单词,如果它以数字开头并且只需通过正则表达式完成。特别是当表达式遇到“KM3.5”时,它应该保存这个完整的单词,因为它是以一个字符开始的。而目前的行为是将其转换为“KM3”,这与我的预期不同。我经历了你的建议,但如果我用“\\ b”替换“^ | \\ W”,则“KM3.5”的结果为“KM3”。这对我来说又是一个问题。 –

+0

定义“单词”。 '\ W'类不认为'.'是一个单词字符。如果您的“单词”的定义与'[A-Za-z0-9 _] +'不同,那么您不能使用'\ W',但必须明确拼写非单词字符(根据您的定义)。 –

相关问题