swift - 在两个字符串范围或字符串结尾之间查找字符串
问题描述
我正在尝试提取两个字符串之间的任何内容。第一个字符串是已知字符串,第二个字符串可以来自字符串列表。
例如,
我们有开始字符串和结束字符串。我们想要得到这些之间的文本。
start = "start"
end = ["then", "stop", "other"]
标准
test = "start a task then do something else"
result = "a task"
test = "start a task stop doing something else"
result = "a task"
test = "start a task then stop"
result = "a task"
test = "start a task"
result = "a task"
我已经研究过使用正则表达式,并且我得到了一个适用于两个字符串之间的,我只是无法创建一个带有字符串选项的单词:
(?<=start\s).*(?=\sthen)
我试过使用这个:
(?<=start\s).*(?=\sthen|\sstop|\sother)
但这将在比赛中包括“然后,停止或其他”,如下所示:
"start a task then stop" will return "a task then"
我还尝试像这样在捕获组中“匹配除结束列表之外的任何字符”:(?<=start\s)((?!then|stop|other).*)(?=\sthen|\sstop|\sother)
但这与上面的效果相同。
我正在使用 swift,所以我也想知道这是否可以通过查找两个字符串之间的子字符串来实现。
谢谢你的帮助!
解决方案
您可以使用
(?<=start\s).*?(?=\s+(?:then|stop|other)|$)
请参阅正则表达式演示。要搜索整个单词,请\b
在适当的位置添加单词边界:
(?<=\bstart\s).*?(?=\s+(?:then|stop|other)\b|$)
细节
(?<=start\s)
start
- 与紧接在字符串和空格前面的位置匹配的正向后视.*?
- 除换行符以外的任何 0+ 字符,尽可能少(?=\s+(?:then|stop|other)|$)
- 字符串中紧随其后的位置\s+
- 1+ 空格(?:then|stop|other)
- 其中一个词|$
- 或字符串结尾。
推荐阅读
- cordova - 使用 FCM 的 Cordova 推送通知 android 和 ios
- r - 在 R 上打开 Rdata 文件
- php - 添加查询 HTML/PHPMYADMIN
- vue.js - VUE 不同路径的相同组件实例
- ios - 无法获取ios模拟器中按键的坐标
- database - 在数据库中设置关系表
- php - 我如何编写一个包含每个产品的多个值的数组
- php - 如何从 XML 获取数据并转换为 php 中特定节点的数组?
- entity-framework - EF 代码首先自引用多对多
- docker - codeship 使用 codeship/google-cloud-deployment 的旧图像卡住了