regex - Perl 在逗号上拆分列表,除非在括号内?

标签 regex perl

我有一个数据库,其中包含多个包含逗号分隔值的字段。我需要在 Perl 中拆分这些字段,这很简单,只是其中一些值后面是嵌套在括号中的 CSV,我不想拆分。

例子:

recycling, environmental science, interdisciplinary (e.g., consumerism, waste management, chemistry, toxicology, government policy, and ethics), consumer education

拆分“,”给了我:
recycling
environmental science
interdisciplinary (e.g.
consumerism
waste management
chemistry
toxicology
government policy
and ethics)
consumer education

我想要的是:
recycling
environmental science
interdisciplinary (e.g., consumerism, waste management, chemistry, toxicology, government policy, and ethics)
consumer education

任何 Perl 正则表达式(perts)都可以帮忙吗?

我尝试修改我在类似 SO post 中找到的正则表达式字符串不返回任何结果:
#!/usr/bin/perl

use strict;
use warnings;

my $s = q{recycling, environmental science, interdisciplinary (e.g., consumerism, waste management, chemistry, toxicology, government policy, and ethics), consumer education};

my @parts = $s =~ m{\A(\w+) ([0-9]) (\([^\(]+\)) (\w+) ([0-9]) ([0-9]{2})};

use Data::Dumper;
print Dumper \@parts;

最佳答案

尝试这个:

my $s = q{recycling, environmental science, interdisciplinary (e.g., consumerism, waste management, chemistry, toxicology, government policy, and ethics), consumer education};

my @parts = split /(?![^(]+\)), /, $s;

关于regex - Perl 在逗号上拆分列表,除非在括号内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435564/

相关文章:

java - 替换 Java 正则表达式的第 1 组而不替换整个正则表达式

mysql - DBD::MySQL 在 OSX v10.6.6 上的安装错误

Perl 类关闭

perl - 如何在 Perl 中使用类属性/变量作为打印文件句柄?

perl - 如何在 Perl 中交换两个连续行?

python - 正则表达式删除所有非字母/非数字字符[Python]?

ruby - 如何使用 Ruby 检查字符串中是否至少包含一个数字?

php - 当条目具有\n 时修复 LOAD DATA INFILE

sql - Oracle SQL : Return first line of string using regexp_substr

bash - Perl 将参数从 Bash 传递到文件中