【发布时间】:2013-07-10 14:26:35
【问题描述】:
我是写正则表达式的新手
我有一个类似 TST0101201304-123.txt 的文件名,我的目标是获取 '-' 和 '.txt' 之间的数字
所以我写了这个公式-([0-9]*)\.txt 这将得到我想要的数字,但此外,它正在检索高音 '-' 和字符串的最后一部分 '.txt' 所以上例中的结果是 '-123.txt'
所以我的问题是:
有没有办法在正则表达式中只获取匹配字符串的一部分,例如匹配的子匹配项,而无需在我的 unix 的 shell 脚本代码中对其进行修剪?
我找到了这个答案,但得到了相同的结果: Regexp: Trim parts of a string and return what ever is left
提示:为了测试我的正则表达式使用this网站
【问题讨论】:
-
你的号码被括号
()捕获。您通常可以通过某种方式在您的 API/工具中检索它,但这取决于您使用的是什么。有时通过$1访问它。 -
整个正则表达式匹配
-123.txt,但捕获的(记住的)子字符串匹配你想要的部分,123。确保使用捕获而不是整个匹配。 -
你在用javascript吗?
-
顺便说一句——go-oleg 询问“你在使用 javascript 吗?”的原因是您使用 JavaScript 正则表达式测试器测试了您的正则表达式。
expr match支持的正则表达式完全不同,因此自然正则表达式对它们的用处有限。 -
@simsim:.Net、JavaScript 和 Java 正则表达式在基本功能上都非常相似(尽管在更高级的功能上存在许多差异);但是
expr match支持的正则表达式符号即使在非常基本的功能中也有很多差异,例如,使用\(...\)表示捕获组而不是(...)。