TCL中含两种模式的正则表达式编写求助
TCL正则表达式实现方案
直接用以下正则模式即可满足需求:
regexp -all -inline {([A-Za-z]+)|([[:print:]&&[^A-Za-z]]+)} $Text
模式说明
- 第一分支
[A-Za-z]+:匹配1个及以上大小写字母组成的纯字母序列,完全符合纯字母单词的定义。 - 第二分支
[[:print:]&&[^A-Za-z]]+:[:print:]表示所有可打印字符(本身已排除控制字符)&&[^A-Za-z]是TCL正则的交集语法,筛选出其中非字母的部分- 整体匹配1个及以上纯可打印非字母的序列,满足“非字母、无控制字符、不混合字母”的要求
可选调整(针对空格)
如果不需要匹配空格(把空格当成分隔符而非特殊字符),可以将[:print:]替换为[:graph:]([:graph:]是除空格外的可打印图形字符),模式改为:
regexp -all -inline {([A-Za-z]+)|([[:graph:]&&[^A-Za-z]]+)} $Text
示例验证
假设$Text为Hello, world! 2024:
- 使用
[:print:]版本会得到匹配列表:Hello,,,,world,!,,2024 - 使用
[:graph:]版本会得到:Hello,,,world,!,2024
内容的提问来源于stack exchange,提问作者Theoretical Physics
相关产品推荐
相关产品推荐

