Regex 用于解析名称的正则表达式,在一个或多个单词后面和两个或多个空格之前有一个或多个单词
问题: 如何创建正则表达式以从Scala中的行数组中解析类似“DISNAY LAND 2.0 GCP”的名称,如下所示:Regex 用于解析名称的正则表达式,在一个或多个单词后面和两个或多个空格之前有一个或多个单词,regex,scala,parsing,text,Regex,Scala,Parsing,Text,问题: 如何创建正则表达式以从Scala中的行数组中解析类似“DISNAY LAND 2.0 GCP”的名称,如下所示: DE1ALAT0002 32.4756 -86.4393 106.1 ZQ DISNAY LAND 2.0 GCP 23456 //For using in code: val regex = """(?:[\d\.\d]){2}\s*(?:[\d.\d])\s*(ZQ)\s*([A-Z])""".r . // my attempt v
DE1ALAT0002 32.4756 -86.4393 106.1 ZQ DISNAY LAND 2.0 GCP 23456
//For using in code:
val regex = """(?:[\d\.\d]){2}\s*(?:[\d.\d])\s*(ZQ)\s*([A-Z])""".r . // my attempt
val getName = row match {
case regex(name) => name
case _ =>
}
我确信只有在以下方面:
1) 值之间有不同数量的空格
2) 有用值“DISNAY LAND 2.0 GCP”位于双数字和“ZQ”字母之后
3) 名称用一个空格分隔,可以由一个或多个单词组成
4) 以两个或多个空格结尾的名称
抱歉,如果我重复这个问题,但是经过长时间的搜索,我没有找到正确的解决方案
非常感谢您的回答您可以使用.unchored
模式,如
\d\.\d+\s+ZQ\s+(\S+(?:\s\S+)*)
看详细信息
-1位,\d\.\d+
然后是1位以上
-1+空格\s+
-ZQ
子字符串ZQ
-1+空格(此处,左侧上下文定义结束,现在开始捕获我们需要返回的值)\s+
-捕获组1:(\S+(?:\S\S+*)
-1个或多个非空白字符\S+
)-一个非捕获组,它匹配0个或多个单空格((?:\s\s+*
)序列,然后匹配1个+非空格字符(因此,最多匹配双空格或字符串结尾)\s
输出:
disnayland2.0gcp
那么关于“ZQ”的规则是什么呢?它总是ZQ还是两个字母,或者别的什么?答案是Thx!对于要提取的字符串-始终是ZQ-但也可以有其他2个字母,例如SE、YU等-但它们可能不存在,而不是2个或更多的空格。您可以添加一些输入/输出示例以使其更清晰。多谢大家-这对我来说是正确的,至少现在是这样)
val regex = """\d\.\d+\s+ZQ\s+(\S+(?:\s\S+)*)""".r.unanchored
val row = "DE1ALAT0002 32.4756 -86.4393 106.1 ZQ DISNAY LAND 2.0 GCP 23456"
val getName = row match {
case regex(name) => name
case _ =>
}
print(getName)