我尝试使用ruby gsub
方法从字符串中删除模式。给出以下字符串:
ANTONIO JUAREZ HAMPEL SCHLICH-
TING
我只需删除行尾的连字符并将字符串转换为单行,如ANTONIO JUAREZ HAMPEL SCHLICHTING
。我试过了:
name = <<-TEXT
ANTONIO JUAREZ HAMPEL SCHLICH-
TING
TEXT
name.gsub(/[a-zA-Z](\-\n)/, '')
但它不起作用。 gsub应该在任何非数字字符((\-\n)
)之后立即删除[a-zA-Z]
。
在这里搜索,在SO,我通过this question计算出gsub
忽略正则表达式组并替换所有模式。有没有选择使用ruby中的gsub,或者使用这种方法以不同的方式我可以实现这个结果?
答案 0 :(得分:2)
name.gsub!(/(?<=[A-Za-z])-\n\s*/, '')
&#34;替换短划线,换行符和任意数量的以字母开头的空格,没有任何内容&#34;
后卫((?<=...)
)不被视为比赛的一部分。或者,您可以捕获捕获组中的字母,然后将其重新插入替换中,但它不那么优雅。
答案 1 :(得分:1)
出于好奇:
▶ name = <<-TEXT
▷ ANTONIO JUAREZ HAMPEL SCHLICH-
▷ TING
▷ TEXT
#⇒ " ANTONIO JUAREZ HAMPEL SCHLICH-\n TING\n"
▶ name.split(/-\n\s*/).join
#⇒ " ANTONIO JUAREZ HAMPEL SCHLICHTING\n"
或者,为了摆脱前导/尾随空格:
▶ name.split(/-\n/).map(&:strip).join
#⇒ "ANTONIO JUAREZ HAMPEL SCHLICHTING"
答案 2 :(得分:1)
为什么你认为必须使用正则表达式?
name.split('-').map(&:strip).join
#=> "ANTONIO JUAREZ HAMPEL SCHLICHTING"
答案 3 :(得分:0)
试试这个:
your_string.gsub!(/-\n\s*/, '')
#=> "ANTIONO JUAREZ HAMPEL SCHLITICH\n"
答案 4 :(得分:0)
试试这个:
name = <<-TEXT
ANTONIO JUAREZ HAMPEL SCHLICH-
TING
TEXT
puts name.gsub(/^\s+/,'').gsub(/(?<=[a-zA-Z])(\-\n)/,'')
输出:
ANTONIO JUAREZ HAMPEL SCHLICHTING