Javascript 查找&;替换双引号之间的换行符
我有一个CSV文件,其中包含一些值中的换行符。例如:Javascript 查找&;替换双引号之间的换行符,javascript,regex,csv,search-regex,python,php,c#,Javascript,Regex,Csv,Search Regex,Python,Php,C#,我有一个CSV文件,其中包含一些值中的换行符。例如: "Chiffre","Nom","Descriptif court","Tarifs en clair","Période en clair","Adresse 1","CP","Tel","Site","Facebook","Pictos","@Saveurs","@Famille plus","@Img","Accessible en fauteuil roulant en autonomie","Handicapes","Terrass
"Chiffre","Nom","Descriptif court","Tarifs en clair","Période en clair","Adresse 1","CP","Tel","Site","Facebook","Pictos","@Saveurs","@Famille plus","@Img","Accessible en fauteuil roulant en autonomie","Handicapes","Terrasse","Wifi","Chèque Vacances","Titre Restaurant"
6,"Le Chalet d'en Ô","Cuisine traditionnelle (foie gras, magret myrtilles, croustillant chocolat)
Spécialités savoyardes (fondue, tartiflette.. )
Garanti sans burgers.
Tout est fait maison.Cuisine traditionnelle (foie gras, magret myrtilles, croustillant chocolat)
Spécialités savoyardes (fondue, tartiflette.. )
Garanti sans burgers.
Tout est fait maison.","Menu adulte : de 20 à 30 €
Menu enfant : 10 €.
Suggestion du jour le midi en semaine : entrée,plat, dessert : 20€.Menu adulte : de 20 à 30 €
Menu enfant : 10 €.
Suggestion du jour le midi en semaine : entrée,plat, dessert : 20€.","Midi et soir du jeudi au samedi + midi le dimanche et jours fériés.
Juillet et août, midi et soir du mardi au samedi et midi uniquement dimanche et jours fériés.Midi et soir du jeudi au samedi + midi le dimanche et jours fériés.
Juillet et août, midi et soir du mardi au samedi et midi uniquement dimanche et jours fériés.","Le Cropt - Route de Serraval","74230 Les Clefs","+33 4 50 02 09 00","www.lechaletdeno.com",,"A R J X x",,,,,"A","R","J","X","x"
7,"La Cabane - Pisciculture de Montremont","Bar - restaurant au bord de la rivière dans un cadre champêtre avec sa spécialité la truite.","Menu adulte : de 26 à 35 €.","Juin et septembre : du mercredi au dimanche.
Juillet et août : tous les jours à midi + mercredi à samedi le soir.Juin et septembre : du mercredi au dimanche.
Juillet et août : tous les jours à midi + mercredi à samedi le soir.","Pisciculture de Montremont - 100 impasse des Pesetz","74230 Thônes","+33 4 50 02 00 85","pisciculture-montremont.fr",,"A R X x",,,,,"A","R",,"X","x"
只需要用空格(或任何东西)替换任何换行符
尝试了许多现有的解决方案,但使用\\n
作为搜索词似乎不起作用,以及其他问题
有什么想法吗?谢谢
崇高的文字将足够,但如果另一个工具更容易,没有问题
编辑:
\n
如果我只将此作为搜索词,则效果很好。但是我只需要在“
之间找到它们。到目前为止,我得到的最好结果是将”
之间的所有文本与:(?使用记事本++正则表达式查找并替换:
查找内容:
(,"[^"]*?)[\r\n]+
替换为:
$1
(在$1后面有一个空格)
反复单击“全部替换”,直到找不到更多匹配项。使用文本编辑器无法以安全的方式执行此操作,因为起始和结束分隔符是相同的,并且任何基于查找的解决方案或基于\G
的解决方案都无法正常工作
使用一些支持回调方法/函数的编程语言作为regex replace方法/函数中的替换参数,将任何双引号子字符串与
"[^"]*(?:""[^"]*)*"
请参阅。如果您不需要关心文字双引号,简化版本是“[^”]+”
详细信息
“
-双引号
[^”]*
-0+双引号以外的字符
(?:
)-重复0多次的分组结构
”
-2个双引号
[^”]*
-0+双引号以外的字符
)*
-
“
-双引号
此正则表达式可按如下方式使用:读入文件并使用以下解决方案:
- :
re.sub(r'[^”]*(?:“[^”]*)*”,lambda m:m.group(0)。替换(“\n”,”),s)
- :
s=s.replace(/“[^”]*(?:“[^”]*)*”/g,函数(m){返回m.replace(/\n/g,”);})
- :
$s=preg\u replace\u回调(“~”[^]*(?:“[^]*)*“~”,函数($m){return str\u replace(“\n”,”,$m[0]);},$s)
- :
s=Regex.Replace(s,“\”[^\“]*(?:\“\”[^\“]*)*\”,m=>m.Value.Replace(“\n”,”)
如果要删除\r
和\n
,作为第二步,您可以使用JS中的.replace(/[\r\n]+/g)、
、PHP中的preg\u replace(“~\r+~”、“,$m[0])
、C中的m.Value.replace(“\r”、”).replace(“)、C中的m.group(0).replace(“\n”、“).replace(
)
在C#中,完整的解决方案如下所示
using System.IO;
...
var file = "path_to_file";
var path_to_save = "path_to_save";
var contents = string.Empty;
using (var sr = new StreamReader(file, true)) // true for a Unicode encoding
{
contents = sr.ReadToEnd();
}
contents = Regex.Replace(contents, "\"[^\"]*(?:\"\"[^\"]*)*\"",
m => m.Value.Replace("\n", "").Replace("\r", ""));
using (var sw = new StreamWriter(path_to_save, false, Encoding.UTF8))
{
sw.Write(contents);
sw.Close();
}
\n
对我来说很好。你确定使用了\n
而不是\r
什么的吗?试试[\r\n]
可能是显而易见的,但您是否检查了“替换”中的正则表达式选项?当我使用\n
谢谢您的回答时,它会起作用。请参阅编辑。\n
单独使用时效果很好。regex选项已被选中。\r\n
两个选项都不成功。您可以尝试(?很好的解决方案。它将整个文件作为字符串对象加载。如果文件很大,性能会如何?@CSK正则表达式遵循,因此它与NFA正则表达式一样快。我对正则表达式的性能毫无疑问。如果文件是1GB或10GB。那么字符串对象“的内容"将是1GB或10GB。不确定在这种情况下C#如何处理。文件无法按行读取,因为“\n”可能存在于双引号中。@CSK我知道,我以前的工作中有一个解决方法。我编写了一个C#应用程序,以大约X MB的块读取文件,并在那里进行替换,然后将块连接起来,文件是spl它被分成另一个大小的块,第二次运行替换。这对我来说非常有效。(顺便说一句,记事本++正则表达式查找和替换非常棒)!