另一个正则表达式问题
我输入了这样的文字:
test start first end start second end start third end
我需要这样的比赛:
test first
test second
test third
我尝试过这样的事情:
start(.*?)end
但如何添加“测试”?
感谢您的任何建议
Lennyd
(已编辑 - 输入文字中有错误)
没有机会使用其他编程语言,它应该只是正则表达式。我需要这个用于解析网页的(部分)语法,如下所示:
Season 1 Episode 1 Episode 2 Episode 3 Season 2 Episode 1 Episode 2 ...etc
并且使用此正则表达式我需要输出
<episodeslist>>
<episode season="1" episode="1">
<episode season="1" episode="2">
.. etc
.. deatiled - 它适用于xmbc.org媒体报道
答案 0 :(得分:1)
我是唯一一个不了解lennyd在第一个例子中想要什么的人吗?
现在为这个
输入
Season 1
Episode 1
Episode 2
Episode 3
输出
<episodeslist>
<episode season="1" episode="1">
<episode season="1" episode="2">
假设您正在使用正则表达式多行工具
捉
/Season[^0-9]*([0-9]+)[^\n]*[\s]+Episode[^0-9]*([0-9]+)\n/gs
根据需要添加[\s]+Episode[^0-9]*([0-9]+)\n
个
返回
<list>
<episode season=$1 episode=$2>
<episode season=$1 episode=$3>
<episode season=$1 episode=$4>
<episode season=$1 episode=$5>
只是不确定[^ \ n],如果输入真的那么干净
,请使用[^ E]如果剧集的数量在24 o 26之间变化,则只需运行3个正则表达式
如果你想要一些更灵活的东西,你需要一些强大的应用程序,如linux上的GREP或一些带有其他操作系统UI的克隆,可以做“正则表达式里面的正则表达式”
如果它的某些脚本语言运行正则表达式函数,您可以轻松地将以下内容包装在循环中,直到输入不再匹配任何内容为止 {
1 - Match only `Season[^0-9]*([0-9]+)`, strip if off the input, store the season # in a variable,
2 - Match a block of episodes `([\s]+Episode[^0-9]*[0-9]+\n)+`
3 - Then inside that block match single lines `[\s]+Episode[^0-9]*[0-9]+`
4 - Using the season variable, output the appropriate XML
}
答案 1 :(得分:0)
一个非常原始的正则表达式将是:
echo "test start first end start second end test third end" |
perl -ne 'print "$1 -> $2\n" while (/(\w+).*?(\w+) end/g);'
test -> first
start -> second
test -> third
但我同意 Alan Moore ,您的示例输出有点连线。