Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找&;替换双引号之间的换行符_Javascript_Regex_Csv_Search Regex_Python_Php_C# - Fatal编程技术网

Javascript 查找&;替换双引号之间的换行符

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

我有一个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","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它被分成另一个大小的块,第二次运行替换。这对我来说非常有效。(顺便说一句,记事本++正则表达式查找和替换非常棒)!