返回列表 发帖

从一个字符串中找出匹配项的问题?

本帖最后由 Meters 于 2010-9-4 14:22 编辑

从一个字符串中找出匹配项的问题(C#)?

原始数据:        Zh"a"ng,San,
被转换后的数据:"Zh""a""ng,San,"
原始数据:        Zh""a""ng,San,
被转换后的数据:"Zh""""a""""ng,San,"

请问,如何匹配被转换后的数据?(也就是一个转义符的问题,怎么相互进行转换)

不太理解题义。将每个双引号替换为两个双引号,然后首尾加双引号?
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

回复 2# rex
这是Excel导出的.csv文件格式的数据,导出的数据为一个文本文件。然后中间用,分隔开,如果其中有特殊字符的就会用双引号括起来,包含双引号的就变成了2个连续的双引号。
我就是想用正则表达式将数据提取出来。
求解?

TOP

本帖最后由 Meters 于 2010-9-5 23:31 编辑

回复 2# rex

我在网上搜索到了一种解法?
C# Code:
  1. //解法一:
  2. Regex reg = null;
  3. //reg = new Regex("(?:\\s*([\"'])?(.*?))(?(1)\\1)(?:\\s*,\\s*|$)");     //作者说这有点问题
  4. reg = new Regex("(?!$)\\s*([\"'])?(.*?)(?(1)\\1)(?:\\s*,\\s*|$)");
  5. //解法二:
  6. reg = new Regex("(?:\"(?>[^\"]*(?:\"{2})?|\"(?<D>)|\"(?<-D>))*(?(D)(?!))\")|[^,\\n]*");
复制代码
需要帮个忙,讲下原理?

TOP

老是觉得本页的正则怪怪的,请逐一核对一下,是不是copy过来时,漏掉了转义字符‘\’?
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

本帖最后由 Meters 于 2010-9-6 21:04 编辑

回复 5# rex
我在C#中做过测试的!
然后把C#中的源代码在复制过来的!
C#有些特殊字符需要通过\来进行转译!
去掉转义符:
  1. (?:"(?>[^"]*(?:"{2})?|"(?<D>)|"(?<-D>))*(?(D)(?!))")|[^,\n]*
  2. (?:\s*(["'])?(.*?))(?(1)\1)(?:\s*,\s*|$)
  3. (?!$)\s*(["'])?(.*?)(?(1)\1)(?:\s*,\s*|$)
复制代码

TOP

返回列表