我想修改给定的字符串:
a = "John;Rich;jrich@gmail.com\r\n"
b = "John;Rich;jrich@gmail.com\r"
c = "John,Rich,jrich@gmail.com\n"
以一种格式:
"xxx,yyy,zzzz\n"
我认为最好的方法是使用正则表达式来查找和替换,但我没有经验。
我编写了简单的代码来更改; => ,
:
a.gsub(/[;]/,',')
我发现正则表达式/(\\r\\n)/
会为我找到\r\n
和/(\\r)/
- \r
。
我将加入所有正则表达式以使用一个gsub
执行整个字符串修改时遇到问题。
答案 0 :(得分:4)
试试这个:
result = subject.gsub(/[\r\n]+/, '\n')
RegEx解剖:
"
[\\r\\n] # Match a single character present in the list below
# A carriage return character
# A line feed character
+ # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
"
希望这会有所帮助......
答案 1 :(得分:3)
我将所有正则表达式加在一起以使用一个
gsub
执行整个字符串修改时遇到问题。
您可以将哈希值传递给gsub
:
replacements = {
';' => ',',
"\r\n" => "\n",
"\r" => "\n"
}
a.gsub(Regexp.union(replacements.keys), replacements)
#=> "John,Rich,jrich@gmail.com\n"
b.gsub(Regexp.union(replacements.keys), replacements)
#=> "John,Rich,jrich@gmail.com\n"
c.gsub(Regexp.union(replacements.keys), replacements)
#=> "John,Rich,jrich@gmail.com\n"
a.chomp.tr(';', ',') << "\n"
#=> "John,Rich,jrich@gmail.com\n"
b.chomp.tr(';', ',') << "\n"
#=> "John,Rich,jrich@gmail.com\n"
c.chomp.tr(';', ',') << "\n"
#=> "John,Rich,jrich@gmail.com\n"
答案 2 :(得分:0)
怎么样:
a.gsub(/\R/,'\n')
\R
代表任何换行符
答案 3 :(得分:0)
管道符|
应该可以解决您的问题。 foo|bar
匹配foo或bar,因此您可以将您的正则表达式加入/(\\r\\n|\\r)/
。
但是在你的情况下,更好的解决方案是?
,(foo)?
匹配零或一次foo。因此,您可以将正则表达式编写为/(\\r(\\n)?)/
要在单个gsub中执行所有操作,您需要一次性替换整个字符串。你可以这样做;
puts a.gsub(/([^;]*);([^;]*);(.*?)(\r\n|\r|\n)/,"\\1,\\2,\\3\n")