如何识别字符串中的6个连续数字?

时间:2019-05-20 20:11:16

标签: applescript

Applescript菜鸟,我试图识别文件名中的日期格式,并返回紧接该日期之前的字符。日期在文件中的格式化方式只有6个连续数字。之前的数据表示文件的长度,并且也是数字。这些文件除了日期外,永远不会有6个或更多的连续数字,因此我不必担心误报。我需要做的是找到6个连续的数字,这样我就可以用它来查找日期之前的数据并将所有这些文件分组在一起。

例如: Barry_Waterson_Speech_1955_27.02_012219_video_file_from_grdx1.mov 测试记录冰岛19 040407低质量screener.mov

最初,似乎日期之前的数字具有我可以让代码查找的设置值 如果fileName包含“ 29”,则 但是现在我很困惑如何解决这个问题。我的总体思路如下:

1 个答案:

答案 0 :(得分:0)

问题的最后一部分似乎被吃掉了。无论如何,AppleScript并不是用于文本处理的最佳语言,但是您使用标准技术的任何语言都是基于正则表达式的模式匹配。

例如,要匹配六位数字,您可以使用模式\d{6}\d模式与任何数字匹配,{6}与前面的模式恰好匹配六次。

如果您要从一行的开头提取到六位数的文本,则可以使用(?-s)^(.+?)\d{6}之类的东西。 ^与每一行的开头匹配。 .+?仅匹配一个或多个字符(.+),直到下一个模式匹配(?);在parens中将其分组会提取匹配的文本。默认情况下,.模式匹配包括换行符在内的任何字符,因此请在模式的开头添加(?-s)以关闭换行符(-s)。

有点神秘,但功能非常强大,您需要实践一下才能掌握。大量在线文档和示例;只需搜索“ PCRE正则表达式”即可。 (提示:一次建立一种模式,并在每一步进行测试。)

AppleScript没有对正则表达式的内置支持,但可以通过AppleScript-ObjC桥使用Cocoa的NSRegularExpression类。语法不是很友好,因此您可能要使用library that wraps it for you

use script "Text"

set theText to "Barry_Waterson_Speech_1955_27.02_012219_video_file_from_grdx1.mov
Test Recording Iceland 19 040407 low quality screener.mov"

search text theText for "^(.+?)\\d{6}" using pattern matching

返回:

{{class:matched text, startIndex:1, endIndex:39, foundText:"Barry_Waterson_Speech_1955_27.02_012219", foundGroups:{{class:matched group, startIndex:1, endIndex:33, foundText:"Barry_Waterson_Speech_1955_27.02_"}}}, 
 {class:matched text, startIndex:67, endIndex:98, foundText:"Test Recording Iceland 19 040407", foundGroups:{{class:matched group, startIndex:67, endIndex:92, foundText:"Test Recording Iceland 19 "}}}}