Regex 如何提取“之间的多行字符串”---&引用;迅速地

Regex 如何提取“之间的多行字符串”---&引用;迅速地,regex,swift,linux,text-processing,Regex,Swift,Linux,Text Processing,我想从字符串中提取YAML块。此块不是典型的YAML,以--开始和结束。我希望文本位于这些标记之间,而不是标记本身。以下是测试管柱(swift 4): 让testMe=”“” --- #元数据 标题:哼 作者:杰卡塔图 电邮:jecatatu@gmail.com --- 这是yaml块之外的更多文本 """ 在纯正则表达式中,模式将是--([\s\s]*?)--。我最初的想法是,因为我是一个初学者,所以我会使用,但我无法用语言表达来重现这种模式。我得到的最接近的结果是: let tester

我想从字符串中提取YAML块。此块不是典型的YAML,以
--
开始和结束。我希望文本位于这些标记之间,而不是标记本身。以下是测试管柱(swift 4):

让testMe=”“”
--- 
#元数据
标题:哼
作者:杰卡塔图
电邮:jecatatu@gmail.com
---
这是yaml块之外的更多文本
"""
在纯正则表达式中,模式将是
--([\s\s]*?)--
。我最初的想法是,因为我是一个初学者,所以我会使用,但我无法用语言表达来重现这种模式。我得到的最接近的结果是:

let tester=VerEx()
.find(“--”)
.任何事
.find(“--”)

如何使用Swift中的正则表达式从字符串中提取介于两者之间(但没有)的任何内容?

您可以使用此正则表达式:

let regex = "(?s)(?<=---).*(?=---)" 
}

然后使用它

let matched = matches(for: regex, in: yourstring)
print(matched)

SourceSafe

您可以使用字符串方法

func range<T>(of aString: T, options mask: String.CompareOptions = default, range searchRange: Range<String.Index>? = default, locale: Locale? = default) -> Range<String.Index>? where T : StringProtocol

是的,但是如何使用Swift评估和提取此部分?matches方法看起来非常熟悉:–如果您引用参考资料,请不要忘记添加到原始页面的链接()您是否测试了建议的解决方案?当应用于问题中的字符串时,正则表达式给出了一个空数组。@MartinR非常感谢您的评论,它是正确的,现在我添加了missing@LeoDabus我用了你的正则表达式,但因为它不是问题中最重要的,所以它很简单,但是如果你感觉不好,我会加上它的来源……可能是Swift的副本。注意,结果包括第一个分隔符后的换行符。@MartinR是的,我不考虑处理换行符。正则表达式更新为只获取中间的行。
func range<T>(of aString: T, options mask: String.CompareOptions = default, range searchRange: Range<String.Index>? = default, locale: Locale? = default) -> Range<String.Index>? where T : StringProtocol
let testMe = """
---
# Metadata
title: hum
author: jecatatu
email: jecatatu@gmail.com
---
This is more text outside the yaml block
"""

let pattern = "(?s)(?<=---\n).*(?=\n---)"
if let range = testMe.range(of: pattern, options: .regularExpression) {
    let text = String(testMe[range])
    print(text)
}
# Metadata
title: hum
author: jecatatu
email: jecatatu@gmail.com