Regexp,强制文本垂直

时间:2010-12-03 19:33:14

标签: c# regex

我有这样的文字:“我喜欢stackoverflow”,并希望这个结果带有regexp(以\n分隔):

i
l
i
k
e
s
....

我怎么能用c#做到这一点?

5 个答案:

答案 0 :(得分:8)

你不需要正则表达式,你可以这样做:

string input = "i like stackoverflow";

string result = string.Join("\n", input.Replace(" ", "").ToCharArray());

此代码执行以下操作:

  1. 删除字符串中的所有空格(input.Replace(" ", "")
  2. 将字符串拆分为字符数组(.ToCharArray())。
  3. 将字符数组中的元素连接回一个字符串,每个字符串分隔一个换行符(string.Join("\n", ...)
  4. 正则表达式在保证使用时非常有用。但是,如果不是,请记住jwz quote

      

    有些人在面对问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。

答案 1 :(得分:3)

我真的不确定正则表达式是否理想(参见Donut's answer),但如果你真的想要一个...

Regex.Replace("i like stackoverflow", "([^\\s]\\s?)", "$1\n");

答案 2 :(得分:2)

我认为你正在寻找的正则表达式是

(a-zA-Z)

替换为

$1\n

答案 3 :(得分:1)

Regex.Replace(yourstring, ".\\s?", m => m.Value + Environment.NewLine)

答案 4 :(得分:1)

rot90

如果您可以将其转换为C♯,我认为它可能会做您想要的:

#!/usr/bin/perl 
# rot90 
# Tom Christiansen <tchrist@perl.com>

$/ = "";

# uncomment for easier to read, but not reversible:
### @ARGV = map { "fmt -20 $_ |" } @ARGV;

while ( <> ) {
    chomp;
    @lines = split /\n/;
    $MAXCOLS = -1;
    for (@lines) { $MAXCOLS = length if $MAXCOLS < length; }
    @vlines = ( " " x @lines ) x $MAXCOLS;
    for ( $row = 0; $row < @lines; $row++ ) {
        for ( $col = 0; $col < $MAXCOLS; $col++ ) {
            $char = ( length($lines[$row]) > $col  )
                    ? substr($lines[$row], $col, 1) 
                    : ' ';
            substr($vlines[$col], $row, 1) = $char;
        }
    }
    for (@vlines) {
        # uncomment for easier to read, but again not reversible
        s/(.)/$1 /g;
        print $_, "\n";
    }
    print "\n";
}

它不使用任何正则表达式,所以我认为翻译是可能的。

鉴于此示例输入:

I sit beside the
fire and think
of all that
I have seen:
of butterflies
and meadowflowers
and places
that I've been.
I sit beside the
fire and think
of how the world
shall be
when winter comes
without a spring
that I shall
ever see.

它生成此输出文件:

I f o I o a a t I f o s w w t e 
  i f   f n n h   i f h h i h v 
s r   h   d d a s r   a e t a e 
i e a a b     t i e h l n h t r 
t   l v u m p   t   o l   o     
  a l e t e l I   a w   w u I s 
b n     t a a ' b n   b i t   e 
e d t s e d c v e d t e n   s e 
s   h e r o e e s   h   t a h . 
i t a e f w s   i t e   e   a   
d h t n l f   b d h     r s l   
e i   : i l   e e i w     p l   
  n     e o   e   n o   c r     
t k     s w   n t k r   o i     
h         e   . h   l   m n     
e         r     e   d   e g     
          s             s       

希望这有帮助!如果你把它翻译成C♯,我会喜欢它,如果你给我发一份邮件,因为我很好奇它是如何在那里工作的。我只知道Java(*),而不是C♯,并且听说它好多了。然后,头部的靴子也是如此。 :)


  • 我不是说Java是我所知道的唯一语言。我曾在BASIC-PLUS,FORTRAN,Pascal,Modula-2,PDP-11汇编程序,C,C⁺⁺,DCL,Exec8,Ada,Lisp,Scheme,Prolog,Ratfor,Shell,Icon,REXX,Awk, Perl,Python,M4,Tcl,Ruby,Java,Go,以及我自己设计的十几种小语言。另外,我确定我已经忘记了一些。我只是不知道C♯。请原谅我。我希望我的代码仍可以帮助你。