正则表达式查找换行符 ( "n" ) 并替换为地址中的空字符串



我们有一个包含地址的字符串,如下所示:

"first-name, last-name, email, addressn Ashok, G, "HyderabadnTelanganan India"n John, M, "Mayur ViharnNew Delhin110096, India"n"

并且要求是仅将地址字符串中的所有换行符("")字符替换为"(在\"\内)

预期输出应如下所示:

"first-name, last-name, email, addressn Ashok, G, "Hyderabad Telangana India"n John, M, "Mayur Vihar, New Delhi 110096, India"n "

\n(?=(?:(?!\").)*\"(?:(?:(?!\").)*\"(?:(?!\").)*\")*(?:(?!\").)*$)

试试这个。替换为 empty string 。请参阅演示。

https://www.regex101.com/r/rG7gX4/7

我建议你这样做:

str.gsub(/(?<=").*?(?=")/) { |s| s.gsub(/n/,' ') }
  #=> "first-name, last-name, email, addressn Ashok, G, "heyderabad |
       Telangana  India"  ABCD, L, "Guntur AP 500505, India"n" 

这匹配每个用"括起来的字符串,而又被传递到块以删除所有n(?<=")是一个积极的回头看; (?=")是一个积极的展望。 需要?才能使.*不贪婪,因此匹配在第一个匹配的正前瞻之前停止。

这不会给出所需输出中包含的间距。然而,这种间距似乎有些不一致。 例如,字符串末尾的单个空格从何而来? 你说你想在成对的"之间替换n,但你没有说你想用什么替换它。 (我假设一个空格。 如果你想要不同的间距,你可以调整块内gsub使用的正则表达式。例如,您可能有/s*ns*/ .

最新更新