我想对路径名做一些regexp并保留它。
我要测试的行是:
"/home/tclshell/test.tcl.gz"
"/home/tclshell/test1.tcl"
/home/tclshell/test.tcl
所以它试图像:
regexp {(\S+\.tcl(?:\.gz)?)} $line blank mypath
要么
regexp {(\S+\.tcl(|\.gz))} $line blank mypath
但它似乎不起作用,"
似乎保留在$mypath
中。
正则表达式有什么问题?
答案 0 :(得分:1)
关键是\S
匹配任何字符但空白,因此它也匹配"
。
您可以在模式的开头添加一个可选的"
,但在捕获组的外部添加"?(\S+\.tcl(?:\.gz)?)
:
set line "\"/home/tclshell/test.tcl.gz\""
regexp {"?(\S+\.tcl(?:\.gz)?)} $line blank mypath
puts $mypath
另一种方法是从"
中排除\S
,将其替换为带有空格(\s
)的反向速记类的否定字符类,并将"
添加到[^\s"]
中它:([^\s"]+\.tcl(?:\.gz)?)
:
select a.* from TotalsByGLCenter$ as a
left join TotalsByGLCenter$ as b on a.APSupplierID = b.APSupplierID AND a.Entity=b.Entity and a.ExpenseReportID=b.ExpenseReportID and a.Employee=b.Employee and a.Amount = -b.Amount
where b.Amount is not null
请参阅regex demo