使用正则表达式提取内部组
Extracting inner groups with regex
我有以下字符串
([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6')) AND (((SUM_RevisionAnomalia_UltRevision_1M = 1) AND (CANT_ConsumoFact_UltRevision_1M > 1)) OR ((SUM_RevisionNoAnomalia_UltRevision_1M + 1) AND (CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2))) OR (SUM_RevisionNoAnomalia_UltRevision_1M <= 1)
并且我正在尝试提取所有内部组,所以我的答案应该包含
([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6'))
(SUM_RevisionAnomalia_UltRevision_1M = 1)
(CANT_ConsumoFact_UltRevision_1M > 1)
(SUM_RevisionNoAnomalia_UltRevision_1M + 1)
(CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2)
(SUM_RevisionNoAnomalia_UltRevision_1M <= 1)
当括号内只有一组字符串时,提取它非常容易,但是当给出上面的示例时,我的正则表达式捕获了整个字符串。
我使用的正则表达式是
/(\([a-zA-Z0-9\[\]:_+=-\s\.\(\),'óáéíúüçãôàäê><]+\))/g
您似乎只想匹配 (
和 )
之间的内容,而不是 (
和 )
除非它们是 (...)
以单词字符开头。
你可以使用
\((?:[^()]|\b\([^()]*\))*\)
正则表达式分解:
\(
- 匹配文字 (
(?:[^()]|\b\([^()]*\))*
- 零个或多个序列:
[^()]
- (
和 )
以外的任何字符
|
- 或者...
\b\([^()]*\)
- 单词边界(即在该位置之前,必须有一个单词字符)后跟 (
后跟 (
和 [= 以外的零个或多个字符13=]
\)
- 收盘 )
另一种模式可以是展开的模式(输入越长效率越高):
\([^()]*(?:\b\([^()]*\)[^()]*)*\)
我有以下字符串
([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6')) AND (((SUM_RevisionAnomalia_UltRevision_1M = 1) AND (CANT_ConsumoFact_UltRevision_1M > 1)) OR ((SUM_RevisionNoAnomalia_UltRevision_1M + 1) AND (CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2))) OR (SUM_RevisionNoAnomalia_UltRevision_1M <= 1)
并且我正在尝试提取所有内部组,所以我的答案应该包含
([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6'))
(SUM_RevisionAnomalia_UltRevision_1M = 1)
(CANT_ConsumoFact_UltRevision_1M > 1)
(SUM_RevisionNoAnomalia_UltRevision_1M + 1)
(CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2)
(SUM_RevisionNoAnomalia_UltRevision_1M <= 1)
当括号内只有一组字符串时,提取它非常容易,但是当给出上面的示例时,我的正则表达式捕获了整个字符串。 我使用的正则表达式是
/(\([a-zA-Z0-9\[\]:_+=-\s\.\(\),'óáéíúüçãôàäê><]+\))/g
您似乎只想匹配 (
和 )
之间的内容,而不是 (
和 )
除非它们是 (...)
以单词字符开头。
你可以使用
\((?:[^()]|\b\([^()]*\))*\)
正则表达式分解:
\(
- 匹配文字(
(?:[^()]|\b\([^()]*\))*
- 零个或多个序列:[^()]
-(
和)
以外的任何字符
|
- 或者...\b\([^()]*\)
- 单词边界(即在该位置之前,必须有一个单词字符)后跟(
后跟(
和 [= 以外的零个或多个字符13=]
\)
- 收盘)
另一种模式可以是展开的模式(输入越长效率越高):
\([^()]*(?:\b\([^()]*\)[^()]*)*\)