我有以下字符串:
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,表2)。 secound排列数据。
通过此Excel表格中的剪贴板复制字符串: http://i.stack.imgur.com/5lwaT.png
列由\ t分隔,\ n由\ 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"
现在我需要分割线条,但是我需要一个模式来返回没有被引号括起来的每个标签。
有人能用正则表达式帮我吗?
谢谢:)
答案 0 :(得分:0)
我将它用于我的CSV文件,但是,通过一些小的调整,它也可以使用制表符分隔:
Regex rExp = new Regex(@"(?:^|\x09)(\""(?:[^\""]+|\"\")*\""|[^\x09]*)");
供参考,CSV Regex:
Regex rExp = new Regex(@"(?:^|,)(\""(?:[^\""]+|\""\"")*\""|[^,]*)");
请注意,这也不会捕获周围的引号。
修改强>
也许我假设太多了,但似乎你正在试图获得价值并且正在陷入分界线。这将捕获分隔符中的值。
<强> EDITv2 强>
使用逐字字符串
答案 1 :(得分:0)
因为我太累了,无法想到好的答案,所以这里有一个黑客。如果您可以确定引号已配对,则可以通过三个步骤轻松解决此问题:
像这样:
// 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" );
}
可怕的黑客部分是使用替代字符串,你可以希望它永远不会自然发生。
答案 2 :(得分:0)
您要做的是创建CSV解析器(在您的情况下用tab替换逗号)。有一篇很好的文章说明为什么你不应该这样做:http://secretgeek.net/csv_trouble.asp我曾经尝试编写自己的解析器,但后来停止了因为它真的不那么容易。 Check this free one。它为我节省了几个小时。