[英]Match comments unless the initiating character is surrounded by unescaped quotes
[英]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。 如果您可以确定引号是成对的,则可以通过以下三个步骤轻松破解:
像这样:
// 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.