使用正则表达式从特定单词获取括号中的所有内容
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*\({[^{}]*}\)
您可以使用此正则表达式来完成:
symbols: *\( *{[^}]+} *\)
解释:
symbols:
:“符号”字后跟冒号
*
:任意数量的空格
\(
:左括号
*
:任意数量的空格
{
: 左花括号
[^}]+
:除花括号 以外的任何字符
}
: 闭合花括号
*
:任意数量的空格
)
: 右括号
试试看 here.
我有以下字符串:
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*\({[^{}]*}\)
您可以使用此正则表达式来完成:
symbols: *\( *{[^}]+} *\)
解释:
symbols:
:“符号”字后跟冒号*
:任意数量的空格\(
:左括号*
:任意数量的空格{
: 左花括号[^}]+
:除花括号 以外的任何字符
}
: 闭合花括号*
:任意数量的空格)
: 右括号
试试看 here.