【问题标题】:How do I extract the value from a string using Regex如何使用正则表达式从字符串中提取值
【发布时间】:2020-03-23 14:03:14
【问题描述】:

我正在尝试使用正则表达式从以下字符串中提取数字 9;

" 约翰?\n\r\n\rFRED: 9"

我的正则表达式是

" 约翰\?[\n\r]+FRED: (.*)"

\n 和 \r 是换行符并返回字符(空格),并且显然 "(.*) 是捕获组。

但它不工作!我猜是因为一些非常明显的事情。

顺便说一句,我知道这样做的明显方法是在字符串中搜索“:”,然后以这种方式获取数字,但我正在学习正则表达式,我在这方面花了很多时间这会很好 知道我做错了什么。

【问题讨论】:

  • 您好,请使用您的正则表达式粘贴您的mwe

标签: c++ regex string


【解决方案1】:

您需要正确转义正则表达式中的控制字符。 john \?[\n\r]+FRED: (.*) 中的 [\n\r] 匹配 newlinecarriage return。可能你想要的是\\r\\n,所以你可以在字符串中匹配它。

正确的正则表达式应该是:john \?[\\n\\r]+FRED: (.*)

这是一个很棒的工具,您可以在其中可视化正则表达式:https://regex101.com/r/qaRy5Z/1/

编辑: 在评论建议之后,您还可以使用原始字符串文字,这样您就可以省略双反斜杠:

 std::regex re(R"( john \?[\n\r]+FRED: (.*))");

https://gcc.godbolt.org/z/U2AbTb

【讨论】:

  • 对正则表达式使用原始字符串文字使反斜杠更容易管理,顺便说一句 - 不需要转义。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多