AutoIt脚本:如何拆分字符串且保留句末分隔符?
解决AutoIt拆分句子时保留句末标点的问题
嘿,这个坑我之前踩过!用StringSplit按!?.拆分确实会把这些句末标点丢掉,要保留它们的话,换用正则表达式拆分就完美解决啦。
核心思路:用正向回顾断言实现分割
AutoIt的StringRegExpSplit支持正则表达式,我们可以用正向回顾断言(?<=[!?.])来定位分割位置——这个断言会匹配「前面是!/./?」的位置,分割时不会吃掉这些标点,而是让它们留在前一个句子的末尾。
具体代码示例
Local $displayed_file = "One. Two? Three! Four." ; 使用正则拆分,保留句末标点 Local $LineArray = StringRegExpSplit($displayed_file, "(?<=[!?.])") ; 遍历输出结果(可选:去除句子开头的空格) For $i = 0 To UBound($LineArray) - 1 $LineArray[$i] = StringTrimLeft($LineArray[$i], 1) ; 去掉句子前的空格 ConsoleWrite($LineArray[$i] & @CRLF) Next
运行这段代码后,输出的每个元素都会带着对应的句末标点:
One.
Two?
Three!
Four.
为什么这个方法管用?
正向回顾断言(?<=...)的作用是「检查当前位置的左侧是否符合指定规则」,我们用它匹配!/./?的右侧位置,拆分时就在这个位置切开,自然就把标点留在了前一个句子的末尾,不会像StringSplit那样把分隔符丢弃。
如果遇到更复杂的场景(比如省略号、引号内的标点),只需要微调正则表达式即可,但针对你描述的基础需求,这个方案完全够用~
内容的提问来源于stack exchange,提问作者DED1
相关产品推荐
相关产品推荐

