正则表达式:由嵌套括号和分号分隔
Regex: Separated by nested parentheses and semicolon
我的字符串如下所示(每一行都是一个示例字符串):
Smith, Anna (Univ Cambridge); Doe, Jane (Univ Vienna (Austria)); Doe, John (Univ Tokyo; MIT)
Mueller, Hans (FU Berlin (Germany)); Schmid, Julia (); Doe, John (CalTech); Boe, Jane (TU Wien)
Kim, Lee (Nazarbayev Univ (Kazakhstan); Univ Oxford)
换句话说,该模式包含 Surname, Name (Affiliation);
(如果后面没有其他人,则不包含 ;
),因此括号可以选择性地嵌套 ( () )
或包含 ;
或为空 ()
.
我想提取每个姓名和隶属关系,如:
Smith, Anna (Univ Cambridge)
Doe, Jane (Univ Vienna (Austria))
Doe, John (Univ Tokyo; MIT)
Mueller, Hans (FU Berlin (Germany))
Schmid, Julia ()
Doe, John (CalTech)
Boe, Jane (TU Wien)
Kim, Lee (Nazarbayev Univ (Kazakhstan); Univ Oxford)
执行此操作的正确正则表达式是什么?
我对 (?<=\()(?:[^()]+|\([^)]+\))+
的尝试效果不佳...
由于您预期的匹配项只能有一层嵌套括号,因此您可以使用
\w+,\s*\w+\s*\([^()]*(?:\([^()]*\)[^()]*)*\);?
参见regex demo。
根据您的正则表达式库是否支持递归或平衡结构,这可以进一步增强以匹配任何深度的括号短语。
详情:
\w+
- 一个或多个单词字符
,
- 逗号
\s*
- 零个或多个空格
\w+\s*
- 一个或多个单词,然后是零个或多个空白字符
\(
- 一个 (
字符
[^()]*
- (
和 )
以外的零个或多个字符
(?:\([^()]*\)[^()]*)*
- 零个或多个 (...)
子串序列,中间没有 (
和 )
,然后是 (
以外的零个或多个字符和 )
\);?
- )
然后是可选的 ;
.
我的字符串如下所示(每一行都是一个示例字符串):
Smith, Anna (Univ Cambridge); Doe, Jane (Univ Vienna (Austria)); Doe, John (Univ Tokyo; MIT) Mueller, Hans (FU Berlin (Germany)); Schmid, Julia (); Doe, John (CalTech); Boe, Jane (TU Wien) Kim, Lee (Nazarbayev Univ (Kazakhstan); Univ Oxford)
换句话说,该模式包含 Surname, Name (Affiliation);
(如果后面没有其他人,则不包含 ;
),因此括号可以选择性地嵌套 ( () )
或包含 ;
或为空 ()
.
我想提取每个姓名和隶属关系,如:
Smith, Anna (Univ Cambridge) Doe, Jane (Univ Vienna (Austria)) Doe, John (Univ Tokyo; MIT) Mueller, Hans (FU Berlin (Germany)) Schmid, Julia () Doe, John (CalTech) Boe, Jane (TU Wien) Kim, Lee (Nazarbayev Univ (Kazakhstan); Univ Oxford)
执行此操作的正确正则表达式是什么?
我对 (?<=\()(?:[^()]+|\([^)]+\))+
的尝试效果不佳...
由于您预期的匹配项只能有一层嵌套括号,因此您可以使用
\w+,\s*\w+\s*\([^()]*(?:\([^()]*\)[^()]*)*\);?
参见regex demo。
根据您的正则表达式库是否支持递归或平衡结构,这可以进一步增强以匹配任何深度的括号短语。
详情:
\w+
- 一个或多个单词字符,
- 逗号\s*
- 零个或多个空格\w+\s*
- 一个或多个单词,然后是零个或多个空白字符\(
- 一个(
字符[^()]*
-(
和)
以外的零个或多个字符
(?:\([^()]*\)[^()]*)*
- 零个或多个(...)
子串序列,中间没有(
和)
,然后是(
以外的零个或多个字符和)
\);?
-)
然后是可选的;
.