我想检测用户输入“lw 2,3(9)”的时间,但是它无法读取括号,我使用了这段代码,但它仍然没有检测到括号。
{ R"((\w+) ([[:digit:]]+), ([[:digit:]]+) (\\([[:digit:]]+\\)) )"}
有人可以帮忙吗?
答案 0 :(得分:3)
您需要注意模式中的空格过多,并且因为您使用的是原始字符串文字,所以不应该双重转义特殊字符:
R"((\w+) ([[:digit:]]+), ([[:digit:]]+)(\([[:digit:]]+\)))"
^^^ ^ ^^
用[[:space:]]+
替换文字空格可能是个好主意。
C++ demo打印lw 2, 3(9)
:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
regex rx(R"((\w+) ([[:digit:]]+), ([[:digit:]]+)(\([[:digit:]]+\)))");
string s("Text lw 2, 3(9) here");
smatch m;
if (regex_search(s, m, rx)) {
std::cout << m[0] << std::endl;
}
return 0;
}
答案 1 :(得分:0)
let date1 = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
print(formatter.string(from: date1))
let dateTime = "2013-01-24 18:30 PM"
let dateFormater = DateFormatter()
dateFormater.dateFormat = "yyyy-MM-dd HH:mm a"
let AptDate = dateFormater.date(from: dateTime)
dateFormater.dateFormat = "MMM dd,yyyy hh:mm a"
let strDate = dateFormater.string(from: AptDate!)
print("===> \(AptDate!)")
print("===> \(strDate)")
为我工作
答案 2 :(得分:0)
由于您没有指定是否要捕获某些内容,因此我会提供两个代码段。
您不必使用原始字符串文字转义字符,但必须转义捕获组
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::string str = "lw 2, 3(9)";
{
std::regex my_regex(R"(\w+ \d+, \d+\(\d+\))");
if (std::regex_search(str, my_regex)) {
std::cout << "Detected\n";
}
}
{
// With capture groups
std::regex my_regex(R"((\w+) (\d+), (\d+)(\(\d+\)))");
std::smatch match;
if (std::regex_search(str, match, my_regex)) {
std::cout << match[0] << std::endl;
}
}
}
另一项改进可能是使用\s+
处理多个间距(如果在您的特定情况下允许)。
我无法帮助,但注意到EJP's concerns也可能是正确的:这是一个非常脆弱的解析解决方案。