与字符和数字混合相关的 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。
我的文件包含
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。