正则表达式 - 打破一句话

时间:2011-06-24 08:13:57

标签: regex

我正在工作很长时间才能获得正则表达式字符串 - 但没有任何成功。 希望,在这里得到一些帮助。 有以下格式的字符串:

G/20/EU (picture)/europe 21/

/House/200 hits/real estate

color/red-green/dark blue/orange/321

全局规则:在字符/()上拆分文本 所以以下正则表达式有效:([/()]) 但我还需要删除/拆分单个数字。这里:20和321,但不是21(这是一个短语“欧洲21”)或200(这是一个短语“200次点击”)

有时字符串以/开头,或以/结尾,有时不以。数字可以出现在字符串的开头,结尾或中间。

结果应该是简单的单词或短语,如:

G
EU
picture
europe 21
House
200 hits
real estate
color
red-green
dark blue
orange

有没有人知道,正则表达式是什么样的?

谢谢

4 个答案:

答案 0 :(得分:1)

可能是这样的:

/^\d+\/|\/\d+\/|\/\d+$|\//

即。检查字符串开头的数字,或两个斜线之间的数字或字符串末尾的数字,或者只是它自己的斜杠......

答案 1 :(得分:1)

如果您的正则表达式确实有前瞻性和后瞻性,您可以试试这个:

[/()]|(?<=\/|^)\d+(?=(?:\/|$))

here on Regexr

这会检查一系列数字,其中有/或之前的行^的开头,以及/或行的结尾{{1后面。
或者你的部分

答案 2 :(得分:0)

假设我已经理解了这个例子,下面的正则表达式应该提供所需的输出。

void Main()
{
    string testString = @"G/20/EU (picture)/europe 21/";

    Regex test = new Regex(@"(\w+[^\w\d]?|\d+)/");

    string outputTest = test.Replace(testString, "$1\r\n");

    Console.WriteLine(outputTest);
}

答案 3 :(得分:0)

使用(G)Awk,您可以执行以下操作:

awk -F "[()/]" '{ for (i=1;i<=NF;i++) { if ($i !~ /^[0-9]*$/ ) {print $i }}}' <<EOF
G/20/EU (picture)/europe 21/
/House/200 hits/real estate
color/red-green/dark blue/orange/321
EOF
#OUTPUT:
G
EU 
picture
europe 21
House
200 hits
real estate
color
red-green
dark blue
orange

或参见:http://ideone.com/2f7lJ

HTH