使用正则表达式从特定单词获取括号中的所有内容

Using regex to get everything in parentheses followed from particular word

我有以下字符串:

text='2-05-13 15:31:48.253 StockSpy Realtime Stocks Quote[5353:207339] Websocket: symbols: ({change = "0.5250015";changePercent = "1.49701"; dayVolume = 16608364; exchange = NYQ; id = BAC; marketHours = 1; price = "35.595"; priceHint = 4;quoteType = 8; time = 3304904610000})2022-05-13 15:31:48.256 StockSpy Realtime Stocks Quote[5353:207339] Websocket: Streamer Prices Updat2022-05-13 15:31:48.256 StockSpy Realtime Stocks Quote[5353:207343] refreshG2022-05-13 15:31:48.267 StockSpy Realtime Stocks Quote[5353:207339] webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message: CgReREpJFRSv+0YY8MCp3ZdgKgNESkkwCTgBRb2+wz9ItLvjWGWAnvJD2A2022-05-13 15:31:48.267 StockSpy Realtime Stocks Quote[5353:207339] Websocket: symbols: (  {  change = "485.2383";  changePercent = "1.529258";  dayVolume = 186178996;  exchange = DJI;  id = "^DJI";  marketHours = 1; price = "32215.54";  priceHint = 4; quoteType = 9; time = 3304904614000})'

我只想提取以下文本:

symbols: (  {  change = "485.2383";  changePercent = "1.529258";  dayVolume = 186178996;  exchange = DJI;  id = "^DJI";  marketHours = 1; price = "32215.54";  priceHint = 4; quoteType = 9; time = 3304904614000})

以及该特定格式的所有文本,因为它在我的数据集中出现了多次。

因此,我需要一个正则表达式模式,可以提取括号内的所有数据,包括括号和单词symbols。所以搜索所有单词 symbols 并在最后一个右括号处完成并获取所有这些单词的东西。

我已经使用 regex101 构建了一个模式,我最接近的是这个 pattern 通过使用以下内容:

^[^\()]+(^.)\s

我的文本结构与 regex101 类似,但是,当它只是如上所示的单个字符串时,我使用了:

\(.*?\)

但是它仍然抓取不必要的文本。

您可以使模式更具体一些:

\bsymbols:\s*\({change\s*=[^{}]*}\)

说明

  • \bsymbols:\s* 匹配单词 symbols,然后是 : 和可选的空白字符
  • \({ 匹配 ({
  • change\s*= 匹配 change,可选的空白字符和 =
  • [^{}]* 匹配 {}
  • 以外的可选字符
  • }\) 匹配 })

看到一个regex101 demo

或者只指定符号使模式不那么严格:

\bsymbols:\s*\({[^{}]*}\)

Regex demo

您可以使用此正则表达式来完成:

symbols: *\( *{[^}]+} *\)

解释:

  • symbols::“符号”字后跟冒号
  • *:任意数量的空格
  • \(:左括号
  • *:任意数量的空格
  • {: 左花括号
  • [^}]+:除花括号
  • 以外的任何字符
  • }: 闭合花括号
  • *:任意数量的空格
  • ): 右括号

试试看 here.