我试图写一个正则表达式来匹配所有出现在封闭字符之间的字符串(最有可能是"
-双引号)。这是我在尝试解析csv文件中的一行时经常遇到的一个场景。
所以我有一个样本行,比如:
"Smith, John",25,"21/45, North Avenue",IBM
尝试以下正则表达式:
"(.*)"
但它得到的有点如下:
我期望输出如下:
Smith, John
25
21/45, North Avenue
IBM
我编写的正则表达式试图捕捉示例中"
之间的内容。以上是我期待的结果。
但有一种模糊性:我不是在寻找这样的匹配:,25,
。这让我有点怀疑正则表达式在这里是否可行。
这句话的正确写法是什么?
3条答案
按热度按时间d7v8vwbk1#
如果你真的想运行自己的CSV解析器,你需要教你的正则表达式一些规则:
1.一个字段可以不加引号,只要它不包含引号,逗号或换行符。
1.带引号的字段可以包含任何字符;引号通过加倍进行转义。
1.逗号用作分隔符。
因此,要匹配一个CSV字段,您可以使用以下正则表达式:
看live on regex101.com。
xu3bshqb2#
请不要使用正则表达式,CSV应该由解析器处理。
下面是一个现成的解析器:http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader
您也可以使用OLEDB内置解析器:http://www.switchonthecode.com/tutorials/csharp-tutorial-using-the-built-in-oledb-csv-parser
希望这有帮助
jbose2ul3#
首先,这只会抓住一个群体。其次,你必须不贪婪:
这并不能解决单行中多个匹配项的问题。下面是两个例子:
在C#中: