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]
,如果名称可以包含空格字符)。大约快三倍。