正则表达式:匹配这个字符串

4

我想不通这个问题:

22.584\r\n\t\t\tl-6.579-22

我想匹配"\r\n\t\t\t"并用一个空格" "替换它。问题在于"\t""\r""\n"的数量波动,周围的字符也会变化。
帮忙!

普通空格怎么办?您是否也想用一个空格替换两个空格? - Mark Byers
6个回答

4

s/\s+/ /g

s/(?:\\[rnt])+/ /g

@neezer,注意\s匹配的不仅仅是\t\r\n。它还匹配(在大多数情况下)这些:[ \t\n\x0B\f\r],但当然如果你觉得这样没问题也可以。 - Bart Kiers
@neezer:你在用什么编程语言? - kennytm
@neezer:它的工作方式有什么问题?它是否会出现错误?它是否替换了太多或太少?还是根本没有任何反应? - Mark Byers
我正在使用Ruby。它与任何内容都不匹配。在我的问题字符串中的值不是转义值(例如,要进行匹配,您需要搜索\\r或类似内容)。 - neezer
你的编辑是针对它们个别的,而不是整个组。我需要用一个空格替换整个组。还有其他想法吗? - neezer
我认为这是用于将一系列空格字符替换为一个空格的正确习语。它匹配所有可能的空格,而不仅仅是\r、\t和\n,它匹配一个或多个序列,并进行全局替换,而不仅仅是替换第一个这样的序列。唯一棘手的部分是使正则表达式应用于整个字符串,而不是一次一行,否则您会在输入中留下\n。 - liwp

0
'22.584\r\n\t\t\tl-6.579-22'.gsub(/(\\[rnt])+/, ' ')

0
#!/usr/bin/ruby1.8

s = "22.584\r\n\t\t\tl-6.579-22"
p s                           # => "22.584\r\n\t\t\tl-6.579-22"
p s.gsub(/[\r\n\t]+/, ' ')    # => "22.584 l-6.579-22"

0

我将CR-NL视为一个单独的元素:

str.gsub!(/(?:\r\n)+\t+/, ' ')

0

在PHP中:

preg_replace("/(?:\\\[trn])+/", " ", $str);

你看到这是一个 Ruby 的问题了吗? - glenn jackman
当我回答时没有提到 Ruby 或任何其他语言。后来帖子被编辑了,你可以看到。此外,被采纳的答案使用了 Perl 的语法。 - Matteo Riva

0
sed 's/\\[rnt]/ /g;s/  */ /g'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接