繁体   English   中英

一个正则表达式,用于匹配没有引号引起来的选项卡

[英]A regex to match a tab that isn't surrounded by quotes

我有以下字符串:

ID Table 1 Table 2
1 "Column 1 Column 2 Column 3
1 2 3
4 5 6
7 8 9" "Column A Column B Column C
a b c
d e f
g h i"

第一行包含列标题(ID,Table1,Table 2)。 secound行数据。

该字符串是通过剪贴板从此Excel表格中复制的: http : //i.stack.imgur.com/5lwaT.png

列用\\ t分隔,行用\\ r \\ n分隔。 B2和C2是表。 她的专栏和行也用\\ t和\\ r \\ n分隔。 每个表都用引号引起来。

现在我将行拆分:

Dim rows() as String
Regex = New Regex("\r\n")
rows = Regex.Split(MyString)

返回:

ID Table 1 Table 2

1 "Column 1 Column 2 Column 3
1 2 3
4 5 6
7 8 9" "Column A Column B Column C
a b c
d e f
g h i"

现在,我需要拆分行,但是我需要一个模式,该模式返回每个未用引号引起来的选项卡。

有人可以帮我使用正则表达式吗?

谢谢 :)

我将其用于CSV文件,但应进行一些细微调整,使其也可以与制表符分隔符一起使用:

Regex rExp = new Regex(@"(?:^|\x09)(\""(?:[^\""]+|\"\")*\""|[^\x09]*)");

供参考,CSV正则表达式:

Regex rExp = new Regex(@"(?:^|,)(\""(?:[^\""]+|\""\"")*\""|[^,]*)");

请不要这样也会捕获周围的报价。

编辑

也许我想太多了,但似乎您正在尝试获取值并陷入定界符中。 这将捕获定界符内的值。

编辑v2

使用的逐字字符串

因为我太累了,无法想到一个好的答案,所以这里有一个hack。 如果您可以确定引号是成对的,则可以通过以下三个步骤轻松破解:

  1. 找到引号中的“ ARE”选项卡并将其换出。
  2. 在标签上拆分
  3. 重新放入真实标签。

像这样:

// JS psuedo-code
str = str.replace( /("[^"]*)\t([^"]*")/g, '$1ëïÒ$2' );
pieces = str.split( /\t/ );
for (var i=0,len=pieces.length;i<len;++i){
  pieces[i] = pieces[i].replace( /ëïÒ/g, "\t" );
}

骇人听闻的技巧是使用替换字符串,您可以希望该字符串永远不会自然发生。

您要尝试创建的是CSV分析器(在您的情况下,用制表符替换逗号)。 有一篇很棒的文章介绍了为什么您不应该这样做: http : //secretgeek.net/csv_trouble.asp我曾经尝试编写自己的解析器,但后来停止了,因为它确实不那么容易。 检查这个免费的 它为我节省了几个小时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM