Regex 用于解析名称的正则表达式,在一个或多个单词后面和两个或多个空格之前有一个或多个单词

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

问题: 如何创建正则表达式以从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
  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+)*)
详细信息

  • \d\.\d+
    -1位,
    然后是1位以上
  • \s+
    -1+空格
  • ZQ
    -
    ZQ
    子字符串
  • \s+
    -1+空格(此处,左侧上下文定义结束,现在开始捕获我们需要返回的值)
  • (\S+(?:\S\S+*)
    -捕获组1:
    • \S+
      -1个或多个非空白字符
    • (?:\s\s+*
      )-一个非捕获组,它匹配0个或多个单空格(
      \s
      )序列,然后匹配1个+非空格字符(因此,最多匹配双空格或字符串结尾)
:


输出:
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)