Tcl正则表达式在行尾不起作用

Tcl正则表达式在行尾不起作用,tcl,Tcl,我正在尝试匹配一个如下所示的文件: 22.000 abc_/dasdf 23.652 abc_1/dasdf_0/l 我使用的正则表达式如下所示: [regexp { (\S+)\s+(.+) } $line -> number name } 但是,它仅在文件中字符串后有空格时匹配。例如,它在以下情况下返回匹配: 22.000 abc_/dasdf<space> 22.000 abc\u/dasdf 但是,如果/dasdf之后没有任何内容,则不匹配。默认情况下,文件中的

我正在尝试匹配一个如下所示的文件:

22.000 abc_/dasdf
23.652 abc_1/dasdf_0/l
我使用的正则表达式如下所示:

[regexp { (\S+)\s+(.+) } $line -> number name }
但是,它仅在文件中字符串后有空格时匹配。例如,它在以下情况下返回匹配:

22.000 abc_/dasdf<space>
22.000 abc\u/dasdf

但是,如果
/dasdf
之后没有任何内容,则不匹配。默认情况下,文件中的字符串后面没有空格。这是什么原因?

那是因为大括号内有空格。这些都很重要

使用

或者,如果您希望使用空白以提高可读性:

regexp -expanded  { (\S+) \s+ (.+) } $line -> number name

这是因为大括号内有空格。这些都很重要

使用

或者,如果您希望使用空白以提高可读性:

regexp -expanded  { (\S+) \s+ (.+) } $line -> number name

也可以在RE的确切开始处使用
(?x)
,以启用该标志。有时将标志放在RE中更容易,有时不…也可以在RE的确切开始处使用
(?x)
来启用该标志。有时将标志放在RE中比较容易,有时则不容易……您还可以使用
lassign[split$line]number name
(或者
set name[lassign[split$line]number]
,如果名称可以包含空格字符)。它大约快三倍。您还可以使用
lassign[split$line]number name
(或者
set name[lassign[split$line]number]
,如果名称可以包含空格字符)。大约快三倍。