Regex 用于从csv中删除行的正则表达式

Regex 用于从csv中删除行的正则表达式,regex,csv,Regex,Csv,我有CSV的电话 第一个小数;;;第一文本;;第二个文本带有换行符、特殊符号,包括分号;小数点后第二位,始终存在;第一个点分隔浮动,可能不存在;第二个点分隔浮动,可能不存在;仅当存在上一个浮点值时才显示的第三个文本 我需要删除第二个文本(带有新行和特殊符号) 至于现在我有这样的表达: (?<=;;)(.*?)(?=;\d+) (?如果您有一个CSV文件,其中包含分号和换行符作为引用字段的一部分,那么regex不是合适的工具。想象一下,如果您有一个字段,如“这是一个字段;;不要拆分它;42

我有CSV的电话

第一个小数;;;第一文本;;第二个文本带有换行符、特殊符号,包括分号;小数点后第二位,始终存在;第一个点分隔浮动,可能不存在;第二个点分隔浮动,可能不存在;仅当存在上一个浮点值时才显示的第三个文本

我需要删除第二个文本(带有新行和特殊符号)

至于现在我有这样的表达:

(?<=;;)(.*?)(?=;\d+)

(?如果您有一个CSV文件,其中包含分号和换行符作为引用字段的一部分,那么regex不是合适的工具。想象一下,如果您有一个字段,如
“这是一个字段;;不要拆分它;42”

如果你确信在一个带引号的字段之前或之内永远不会有两个分号,那么你可以试试正则表达式,但是一个专用的CSV解析器肯定是一个更安全的选择

也就是说,让我们看看你的正则表达式失败的原因:

假设行
1;;;2;3
。您的正则表达式将匹配
;2
,因为它满足所有要求-它前面有两个分号,后面有一个分号加数字。它也是字符串中此位置的最短匹配

您能做什么?您可以使用另一个lookback断言来确保不可能在当前位置之前匹配三个分号:

(?<=;;)(?<!;;;)(.*?)(?=;\d+)
(?

试一试-但也要查看CSV库,因为它们会更好地解决您的问题。

如果您有一个CSV文件,其中包含分号和换行符作为引用字段的一部分,那么正则表达式不是用于此的合适工具。想象一下,如果您有一个类似于
“这是一个字段;不要拆分此字段;42”

如果你确信在一个带引号的字段之前或之内永远不会有两个分号,那么你可以试试正则表达式,但是一个专用的CSV解析器肯定是一个更安全的选择

也就是说,让我们看看你的正则表达式失败的原因:

假设行
1;;;2;3
。您的正则表达式将匹配
;2
,因为它满足所有要求-它前面有两个分号,后面有一个分号加数字。它也是字符串中此位置的最短匹配

您能做什么?您可以使用另一个lookback断言来确保不可能在当前位置之前匹配三个分号:

(?<=;;)(?<!;;;)(.*?)(?=;\d+)
(?

试一下,但也要看CSV库,因为它们会更好地解决你的问题。正如提姆在最后一行中建议的那样,虽然有可能用正则表达式来表达这项工作,但总是用正确的工具来做这项工作。考虑CSV库。正如提姆在回答的最后一行中所建议的,尽管它可能是POSS。可以用正则表达式来完成这项工作,总是使用正确的工具来处理这个任务。考虑一个CSV库。表达式中的所有表达式都选择第一个文本(前面是三个分号)。您建议所有表达式都选择第一个文本(前面是三个分号)。