在两个字符串范围或字符串末尾之间查找字符串



我正在尝试提取两个字符串之间的任何内容。第一个字符串是已知字符串,第二个字符串可以来自字符串列表。

例如,

我们有起始字符串和结束字符串。我们想要得到这些之间的文本。

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"

我已经研究过使用正则表达式,我得到了一个适用于两个字符串之间的正则表达式,但我无法创建一个带有字符串选项的单词:(?<=starts).*(?=sthen)

我尝试过使用这个:(?<=starts).*(?=sthen|sstop|sother)但这将包括比赛中的"然后,停止或其他":"start a task then stop" will return "a task then"

我还尝试过"匹配除结束列表之外的任何字符";在像这样的捕获组中:(?<=starts)((?!then|stop|other).*)(?=sthen|sstop|sother),但这具有与上面的效果相同的效果。

我使用的是swift,所以我也想知道这是否可以通过在两个字符串之间找到子字符串来实现。

谢谢你的帮助!

您可以使用

(?<=starts).*?(?=s+(?:then|stop|other)|$)

请参阅regex演示。要搜索完整单词,请在适当位置添加b单词边界:

(?<=bstarts).*?(?=s+(?:then|stop|other)b|$)

查看另一个regex演示

详细信息

  • (?<=starts)-一个与start字符串和空白之前的位置相匹配的正向查找
  • .*?-换行字符以外的任何0+个字符,尽可能少
  • (?=s+(?:then|stop|other)|$)-字符串中紧跟
    • s+-1+空白
    • (?:then|stop|other)——其中一个词
    • |$-或字符串末尾

最新更新