如何使用regexp获取“52:178 / 179'XXX BBB'”?

时间:2016-05-17 02:36:10

标签: regex tcl

如下文字文件:

1:1/1988 'XX'
1:2/1988 'BB'
...
1:1987/1988 'Target1'
1:1988/1988 'XXX'
2:1/1785 'XDS'
...
2:1784/1785 'Target2'
...

如何在tcl中使用regexp获取 Target1 Target2 ? 非常感谢。

对不起,伙计们,我认为你误解了我的问题。

我的观点是\ d +: n-1 / n '目标'。

有没有办法解决这个问题?

我用它来获取目标。

if {[regexp {\d+:(\d+)/(\d+) +'(\w+)'} $str vv Num1 Num2 Target] } { if {[expr $Num2 - $Num1]==1} { GET TARGET... } }

我只是想知道是否有任何聪明的方法来获取Target ???

再次感谢。

2 个答案:

答案 0 :(得分:1)

要在TCL中转义asterisk(*),您需要\\

要从字符串中提取子字符串,您需要在{regexp中{​​{1}} group capturing

试试这个,

(.*)

从整个文件中提取;# For example set var "1:1987/1988 '**Target1**'" regexp ".* \'\\*\\*(.*)\\*\\*\'" $var match match1 puts $match1 ;# Gives Output Target1

substring

文档:regexpgroup-capturing

答案 1 :(得分:0)

使用模式分组:

\*\*([^*]+)\*\*

或使用lookarounds:

(?<=\*\*)[^*]+(?=\*\*)

Demo