TCL 正则表达式 trim 来自特定特殊字符的字符串
TCL Regular expression to trim the string from specific special character
我的 TCL 正则表达式如下
regexp {((\d:[\da-zA-Z]+))} "3001:470:8865:2E01::190:201" out
out的当前值为完整的字符串
3001:470:8865:2E01::190:201
我想要::
之前的字符串
3001:470:8865:2E01
这将捕获 ::
之前的所有内容:(.*)::
要在 ::
处停止 RE,请使用前瞻:
regexp {.*(?=::)} "3001:470:8865:2E01::190:201" out
如果 RE 不匹配,则不会写入 out
变量。
或者,删除您不想要的内容:
regsub {::.*} "3001:470:8865:2E01::190:201" {} out
puts $out ;# ==> 3001:470:8865:2E01
您可以在字符串的开头匹配 single-colon 个分隔的字母数字字符块:
regexp {^\w+(?::\w+)*} "3001:470:8865:2E01::190:201" out
puts $out
输出:3001:470:8865:2E01
见Tcl demo online and the regex demo。详情:
^
- 字符串开头
\w+
- 一个或多个字母、数字或下划线
(?::\w+)*
- 出现零次或多次冒号,然后是一个或多个字母、数字或下划线。
如果您只想匹配字母和数字,您也可以考虑将 \w
模式精确到 [\dA-Za-z]
,并将第一个 \w+
替换为 \d+
:
regexp {\d+(?::[\dA-Za-z]+)*} "3001:470:8865:2E01::190:201" out
见this Tcl demo and this regex demo。
我的 TCL 正则表达式如下
regexp {((\d:[\da-zA-Z]+))} "3001:470:8865:2E01::190:201" out
out的当前值为完整的字符串
3001:470:8865:2E01::190:201
我想要::
之前的字符串3001:470:8865:2E01
这将捕获 ::
之前的所有内容:(.*)::
要在 ::
处停止 RE,请使用前瞻:
regexp {.*(?=::)} "3001:470:8865:2E01::190:201" out
如果 RE 不匹配,则不会写入 out
变量。
或者,删除您不想要的内容:
regsub {::.*} "3001:470:8865:2E01::190:201" {} out
puts $out ;# ==> 3001:470:8865:2E01
您可以在字符串的开头匹配 single-colon 个分隔的字母数字字符块:
regexp {^\w+(?::\w+)*} "3001:470:8865:2E01::190:201" out
puts $out
输出:3001:470:8865:2E01
见Tcl demo online and the regex demo。详情:
^
- 字符串开头\w+
- 一个或多个字母、数字或下划线(?::\w+)*
- 出现零次或多次冒号,然后是一个或多个字母、数字或下划线。
如果您只想匹配字母和数字,您也可以考虑将 \w
模式精确到 [\dA-Za-z]
,并将第一个 \w+
替换为 \d+
:
regexp {\d+(?::[\dA-Za-z]+)*} "3001:470:8865:2E01::190:201" out
见this Tcl demo and this regex demo。