如何在TCL中找出一个带有正则表达式的字符串中的一个或多个字符

Chr*_*ris 1 regex string tcl pattern-matching

我需要一个简单的解决方案来确定某些字符是否在Tcl中的字符串中.我的想法是用正则表达式做到这一点.

我的字符串看起来像:" word_word-word_word_word-word"或" word.word.word.word-word".我的问题是,有时我得到包含字符串. _-然后我需要调用其他程序来处理它.

现在再问一个问题,如何弄清楚字符串是否包含" _-_-"或" ...-"与之间的任何单词_ . -

Don*_*ows 5

如果你只是想看看,如果字符串中包含_,-,_,-与之间的任意随机垃圾的顺序,我们可以做到这一点两种方式(可以替代其它分隔符,但.在正则表达式需要特殊待遇;要么[.]还是\.会做):

regexp {_.+-.+_.+-} $stringToMatchAgainst
Run Code Online (Sandbox Code Playgroud)
string match {*_*-*_*-*} $stringToMatchAgainst
Run Code Online (Sandbox Code Playgroud)

好的,从技术上讲,最后一个(全局匹配)匹配略有不同的东西,但效果类似.

但是我不确定上面是你真正想要的.猜测你真的在words之后吗?可能也是分离器.

为了获得单词列表,我们使用了一种稍微不同的技术(不能使用\w匹配下划线,因为这在标识符中很常见):

set wordList [regexp -all -inline {[a-zA-Z0-9]+} $stringToMatchAgainst]
Run Code Online (Sandbox Code Playgroud)

如果您也在分隔符之后,最简单的方法是使用textutil::split::splitxTcllib:

package require textutil::split
set tokenList [textutil::split::splitx $stringToMatchAgainst {([-_.])} ]
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,使用它的输入字符串word_word-word_word_word-word给出以下输出:

word _ word - word _ word _ word - word
Run Code Online (Sandbox Code Playgroud)