我们有一个包含地址的字符串,如下所示:
"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*/
.