与字符和数字混合相关的 tcl 正则表达式

tcl regexp related to mix of character and number

我的文件包含

roll_number : someNumber ; name(mixOfcharactersAndNumbers) filePathInLinux 

比如

roll_number : 81 ; name(JOHN_23_CARTER) /home/directory/johnc
roll_number : 22 ; name(michael21_Lee) /home/directory/mhlee 

我的正则表达式是

regexp {.*name([a-zA-Z0-9]+.*} $line match name 
regexp {.*name(.*).*} $line match name 

似乎由于数字和字符的混合,我无法正确地使用正则表达式,我是不是漏掉了什么?

主要问题是您没有转义 ( 字符,也没有考虑第一个正则表达式中的 _ 字符。此外,您不需要匹配整个输入,TCL 正则表达式不需要 部分匹配 ,即在较长的子串中匹配较短的子串。

只需匹配 name((使用 name\(),然后将一个或多个字符(使用 (\w+))捕获到组 1 中:

set a "roll_number : 81 ; name(JOHN_23_CARTER) /home/directory/johnc"
regexp {name\((\w+)} $a - name

参见 this TCL demo 打印 JOHN_23_CARTER

此外,请参阅 online regex demo