我正在嘗試使用 std::regex 和 [:print:] 字符類洗掉不可列印的字符。輸入字串可能是這樣的
"\nTesting\t regex and \n\n\t printable characters \a\b set \0\f"
這里\n、\t、\a、\b、\0、\f 是不可列印的字符。我想洗掉除 \n 和 \t 之外的不可列印的內容。
std::regex nonprintable_regex("(^[[:print:]] )");
std::smatch sm;
if (std::regex_search(str, sm, nonprintable_regex)) {
str = std::regex_replace(str, nonprintable_regex, "");
}
但我沒有得到預期的結果。
"\nTesting\t regex and \n\n\t printable characters set "
我知道我必須為 \n 和 \t 添加一些東西,但不知道如何添加該條件。任何指標/幫助,謝謝
uj5u.com熱心網友回復:
您無需先測驗正則運算式,regex_search此處呼叫是多余的。
該^錨只在字串的開頭匹配,所以你要匹配的字串,這是不是你想要的開始任何一個或多個可列印字符。
要匹配您需要使用的任何不可列印的字符[^[:print:]],一個否定的括號運算式,它匹配任何字符,但print能字符。
您可以使用
std::regex nonprintable_regex("(?![\n\t])[^[:print:]]");
// Or
std::regex nonprintable_regex("[^[:print:]\n\t] ");
請參閱C 演示:
std::string str( "\nTesting\t regex and \n\n\t printable characters \a\b set \0\f" );
std::regex nonprintable_regex("(?![\n\t])[^[:print:]]");
str = std::regex_replace(str, nonprintable_regex, "");
std::cout << str << std::endl;
該(?![\t\n])負前瞻限制什么[^[:print:]]可以匹配,即,它可以不再匹配制表符和換行符。
另一種方法是將\n并包含\t到否定括號運算式本身中以使其更快,[^[:print:]\n\t] .
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354311.html
上一篇:Python正則運算式查找括號內的所有內容,事先帶有前綴
下一篇:正則運算式避免特定內容
