你好正则表达式专家,
到目前为止,我还从来没有用正则表达式解决过字符串操作问题,至少用一步就能以优雅的方式解决。下面是我正在处理的示例数据:
0、"section1“、"(7)禁止在美国境外交付‘证书’。由于1940年法规第339条、现行法律第68条和第341条都明确规定,只有当该人当时在美国境内时,才能向该公民提供证书,显然该文件不能也不能在美国境外交付。”,http://www.google.com/。
1,"section2",,http://www.google.com/
2,"section3",",,",http://www.google.com/
这是一个大得多的CSV文件的一部分。使用一个优雅的正则表达式,我只想将双引号中的所有逗号替换为下划线字符(_)。重要的是,正则表达式不能替换引号之外的任何逗号,因为这会扰乱CSV数据结构。
谢谢,汤姆
--
澄清:
对不起,伙计们,我发了这个问题,没有完全澄清我的情况,所以让我总结如下:
beforehand).
""或"""等表示,因此它们很容易被替换为JavaScript.中的引用)。
使用上面的示例文本,下面是运行正则表达式替换后的样子(总共应该有5个替换):
0、"section1“、"(7)禁止在美国境外交付‘证书’。由于1940年statute_ 68/第339条和现行法律第341条都明确规定,只有当该个人当时在美国States_内时,才能向citizen_提供证书,很明显,该文件不能也不能在美国境外交付。”
1,"section2",,http://www.google.com/
2,"section3","__",http://www.google.com/
发布于 2010-12-18 07:11:42
我会帮你的,但你必须保证不再用“优雅”这个词。最近工作太辛苦了,应该休息一下。:P
(?m),(?=[^"]*"(?:[^"\r\n]*"[^"]*")*[^"\r\n]*$)这与逗号匹配,如果在逗号和记录末尾之间有一个奇数引号。我假设一种标准的CSV格式,在这种格式中,记录结束在下一行分隔符处,该分隔符不包含引号。行分隔符在引用字段中是合法的,如果用另一个引号转义,则引号也是合法的。
取决于您使用的regex版本,您可能不得不使用\r?$而不仅仅是$。例如,在.NET中,只有linefeed (\n)被认为是行分隔符。但是在Java中,$在\r in \r\n之前匹配,而不是在\r和\n之间匹配(除非您设置了UNIX_LINES模式)。
发布于 2010-12-18 05:44:49
正则表达式不擅长匹配平衡的文本(即开始和结束引号)。
一种天真的方法是反复应用类似的东西(直到它不再匹配):
s/(^[^"]*(?:"[^"]*"[^"]*)*?)"([^",]*),([^"]*)"/$1"$2_$3"/但用转义引号是行不通的。最好的(即最简单、最易读、最可维护)解决方案是使用CSV文件解析器,逐个遍历所有字段值(使用下划线代替逗号),然后将其写回文件中。
发布于 2010-12-18 11:32:59
如果您不使用Python,请原谅,下面的代码如下所示。我没有看到你用哪种语言的迹象。总之,我觉得密码是完全可以理解的。
import re
ch = '''0,"section1","(7) Delivery of 'certificate' outside the United States prohibited.
Since both section 339 of the 1940 statute, 68/ and section 341 of the present law are explicit
in their statement that the certificate shall be furnished the citizen, only if such individual
is at the time within the United States, it is clear that the document could not and cannot be
delivered outside the United States.",http://www.google.com/
1,"section2",,http://www.google.com/
2,"section3",",,",http://www.google.com/
'''
poto = re.compile('("[^"]+")')
def comma_replacement(match):
return match.group().replace(',','_')
print poto.sub(comma_replacement , ch)此方法将两个相邻逗号保留在行中。
1,"section2",,http://www.google.com/
保持不变。这是你想要的东西吗?
https://stackoverflow.com/questions/4476812
复制相似问题