csv 查找X个逗号后的位置的表达式

aoyhnmkz  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(107)

我正在寻找某种类型的正则表达式(或类似的),我可以在UltraEdit文本编辑器中使用,将找到固定数量的逗号(忽略任何引号中的内容,如下所示)之间的文本,并允许我使用做一个查找和替换。
在这个例子中,我想找到逗号2和3之间的文本(用于列3中的数据),然后能够执行查找/替换。因此,我只是在寻找一个表达式,我可以插入编辑器的查找和替换函数,以找到这个文本的位置(对于所有行),并将其替换为编辑器中的内容。
x1c 0d1x的数据

249716,"UNITED HEALTHCARE OF NEW YORK, INC",1007,ORGANIZATION,1007,US,,PO BOX 5290
249717,"ERIE FAMILY LIFE INSURANCE, COMPANY",INT018249699,ORGANIZATION,INT018249699

字符串


wn9m85ua

wn9m85ua1#

用于查找和选择CSV文件中第三个数据列中的字段值的Perl正则表达式为:

^[^\r\n,]*,(?:"[^"]*")+,\K[^\r\n,]*

字符串
此搜索表达式仅在以下条件下有效:
1.第一个字段值从不包含逗号,因此也不包含在"中。
1.第二个字段值必须包含在"中,因此可以是包含逗号和换行符的字符串,也可以是",前提是编码正确,如Wikipedia关于comma-separated values的文章所述。
1.第三个字段值必须不带逗号,并且也不能包含在"中。
Perl语法中正则表达式的解释:

  1. ^指示Perl正则表达式引擎在一行的开头开始每次搜索。
  2. [^\r\n,]*是一个否定类定义,用于查找任何不是回车、换行符或逗号的字符。该表达式与第一个逗号分隔值匹配。对于给定的示例,也可以使用[0-9]+
  3. ,必须是数据行中的第一个分隔符(而不是换行符)。
  4. (?: ... )是一个非标记/非捕获组,用于定义一个表达式,在该表达式上应用乘数+,以查找一次或多次与组内的表达式匹配的字符串。
  5. "[^"]*"用于查找以"开始并以"结束的字符串,并且由零个或多个字符组成,而不是字符",其中还包括换行符,如回车和换行符。应用一次或多次的此表达式与每个数据行中第二个字段值的字符串值匹配。
  6. ,必须被发现下一个是数据行中的第二个分隔符。
  7. \K指示Perl正则表达式引擎保留已匹配的字符串,这导致在UltraEdit中未选择找到的字符串的这一部分,并且在替换操作中忽略这一部分。如果replace应该以任何方式修改每个数据行中的第一个或第二个字段值,请从搜索表达式中删除\K
  8. [^\r\n,]*也是一个负类定义,用于查找任何不是回车、换行符或逗号的字符。表达式的最后一部分匹配并选择每个数据行中的第三个字段值,如果不是字符串值,则可能包含逗号,回车,换行符或双引号,这将需要将字段值包含在"中以获得有效的CSV格式。
    如果CSV文件的字段值中不包含换行符,则也可以单击第三个功能区选项卡上的UltraEdit第四组中的Edit命令项上的Column / block命令项上的CSV convert或第一个菜单项上的子菜单中的Edit子菜单中的CSV convert命令项上的Convert to fixed width或菜单项上的 traditional 菜单中的Column命令项上的转换为固定列打开对话窗口转换为固定列**。
    在此对话框窗口中,应取消选中第一个选项 * 仅扫描第一行(与完整文件)
    第二个选项 Keep delimiter with the fixed columns 可以根据用户的偏好进行选中或取消选中。
    第三个选项 Ignore separator in quotes(') 应取消选中,在这种情况下,CSV文件使用正确的"将值用逗号、双引号或双引号中的换行符括起来。
    必须为此CSV文件选中第四个选项 Ignore separator in doubles quotes(“)
    第五个选项 Separator character(^t for tab): 应该配置,作为分隔符。
    单击按钮扫描填充最后一个选项 * 字段宽度(以逗号','分隔)
    ,单击按钮转换将逗号分隔格式转换为固定列宽格式。
    现在,通过使用Perl正则表达式replace with ^.{x}匹配每行开头的x字符数,或者使用高级替换选项 In columnxtoy仅在文件中每行的指定字符列范围内进行替换,可以更容易地完成字段值的替换。注意:在替换窗口中,第一个字符列的列号为0。在状态栏中,第一个字符列的列号显示为值1。
    可以分别使用命令将固定宽度转换为CSV(* 功能区 * 模式和带有 * 现代 * 菜单的工具栏/菜单模式)转换为字符分隔(带有 * 传统 * 菜单的工具栏/菜单模式)将文件转换回CSV文件。
    还可以使用UltraEdit脚本进行真正的CSV文件解析,并使用脚本代码进行修改。
    例如:
  • 将CSV数据转换为固定宽度数据?
  • 将具有40个逗号分隔值的2行转置为具有2列的40行

相关问题