如何解决一次匹配2个模式的正则表达式或同时匹配两个模式的Applescript中的SED
我有2种类型的字符串用户输入,并且我试图通过使用1个正则表达式进行匹配。
到目前为止,我已经使用2个正则表达式进行了此操作,但是我想将它们组合成一个匹配两个字符串的..如果可能的话。
我要寻找的比赛是:617251,617076,985922,147721
首次用户输入(字符串):
JEANS
Blue-Denim
6607020201
617076
HOSEKNLA
Oliv
6909020002
985922
ROCKWBKU
Rot
6919020006
147721
BLAZER
rot
我将这个与(?<!\d)\d{6}(?!\d)
第二个用户输入(字符串):
a Ecru 617 251 64 I b Lagune 617 076 64
c Gelb 985 922 64 I d Weiß 147 721 64
asdasfas
我将其与以下项匹配:(\d){3} (\d){3}
,但是如果不替换,则无法删除匹配结果的space
。
如果不可能的话,我的另一个想法是通过在AppleScript中使用SED来清除两种类型的字符串以匹配所需的结果。
解决方法
在第一个模式中使用环视功能时,您可以使用2个捕获组,其中第二个捕获组与可选空间匹配。
(?<!\d)(\d{3}) ?(\d{3})(?!\d)
部分
-
(?<!\d)
向后看是负数,请不要在左侧直接声明一个数字 -
(\d{3})
捕获第1组,匹配3位数字 -
<code> ?(\d{3})
匹配可选空格并在 group 2 中捕获3位数字
-
(?!\d)
负向查找,请不要在右边直接声明一个数字
要进行匹配,您应该考虑使用grep
而不是sed
。
这是OSX上的有效grep
。请注意,将\<
和\>
用于单词边界,因为从示例数据中可以明显看出,您实际上并不需要先行断言和先行断言。
grep -oE '\<[0-9]{3} ?[0-9]{3}\>' file
617076
985922
147721
617 251
617 076
985 922
147 721
在OSX上,等效的sed
是这样:
sed -nE '/[[:<:]][0-9]{3} ?[0-9]{3}[[:>:]]/p' file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。