我有一个这样的句子:
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"
中的分号以外的所有分号。
答案 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
模块来定义要使用的分隔符。
使用这些分隔符和报价进行交易是一个常见的问题,已经得到了很好的解决,并且还充满了奇怪的极端情况。如果您可以使用现有的工具来代替它,而不是尝试编写一个正则表达式,那可能是最安全的。