我知道我可以设置列表并使用foreach或循环来捕获1 by 1。只是想知道是否有一种方法可以直接使用regexp?例如:字符串:I_am_a_string模式:am string str
I_am_a_string
am string str
if {[regexp -- {am} $string]} { Do something here }
我怎么能把所有的模式加在一起,只使用1个正则表达式来捕捉字符串是否包含1个模式?
rseugnpd1#
这个问题不是很清楚,但我认为它可能是问如何一次测试多个模式。如果是这样,你可以这样做:
if {[regexp -- {am|string|stuff} $string]} { Do something here }
regexp可以处理的模式形式在https://www.tcl-lang.org/man/tcl/TclCmd/re_syntax.html中有文档记录
regexp
qcbq4gxm2#
要一次获取一个字符串中的所有匹配项,可以使用-all选项regexp,可能是-inline(除非您只想计算有多少个匹配项)。您可以获取匹配项的文本(默认),或者获取它们所在的索引(如果您给予-indices选项)。然后通常使用foreach来检查匹配结果列表;这是一个有效的组合。下面是一个示例:
-all
-inline
-indices
foreach
set inputText "badaafaaagaaaahaaaaa" foreach aSequence [regexp -all -inline {a+} $inputText] { puts $aSequence }
它打印:
a aa aaa aaaa aaaaa
请注意,如果在正则表达式中使用捕获括号,则可能希望foreach的多变量形式遍历结果。
2条答案
按热度按时间rseugnpd1#
这个问题不是很清楚,但我认为它可能是问如何一次测试多个模式。如果是这样,你可以这样做:
regexp
可以处理的模式形式在https://www.tcl-lang.org/man/tcl/TclCmd/re_syntax.html中有文档记录qcbq4gxm2#
要一次获取一个字符串中的所有匹配项,可以使用
-all
选项regexp
,可能是-inline
(除非您只想计算有多少个匹配项)。您可以获取匹配项的文本(默认),或者获取它们所在的索引(如果您给予-indices
选项)。然后通常使用foreach
来检查匹配结果列表;这是一个有效的组合。下面是一个示例:
它打印:
请注意,如果在正则表达式中使用捕获括号,则可能希望
foreach
的多变量形式遍历结果。