正则表达式,用于选择除双引号内的字符以外的一些字符

时间:2019-04-11 16:15:50

标签: regex

我有一个这样的句子:

Number; Year; "43643-25262.123; ABC2322"; Project is supported by the Organization X ("No. 11AZD121"); adress; "12344;123131; 3859563";;; employees

如何编写正则表达式来选择分号(;),但带双引号(")的字段中的分号除外?因此,我希望正则表达式查找除"43643-25262.123; ABC2322""12344;123131; 3859563"中的分号以外的所有分号。

2 个答案:

答案 0 :(得分:1)

这应该有效

input = Number; Year; "43643-25262.123; ABC2322"; Project is supported by the Organization X ("No. 11AZD121"); adress; "12344;123131; 3859563";;; employees

pattern= (!?)(“.*?”;*)

input.match(pattern)

//output Number; Year;  Project is supported by the Organization X (); adress;  employees

答案 1 :(得分:1)

在我看来,您拥有的是使用分号而不是逗号的CSV(逗号分隔值)字符串。我会看看是否存在可以用您选择的编程语言处理CSV文件并可以将分号作为分隔符的现有代码。

例如,在Perl的Text::CSV_XS模块中,您可以调用->sep_set模块来定义要使用的分隔符。

使用这些分隔符和报价进行交易是一个常见的问题,已经得到了很好的解决,并且还充满了奇怪的极端情况。如果您可以使用现有的工具来代替它,而不是尝试编写一个正则表达式,那可能是最安全的。