Regex scala正则表达式以双空格限制

Regex scala正则表达式以双空格限制,regex,scala,Regex,Scala,我有一个数据如下 135 stjosephhrsecschool london DunAve 175865 stbele_higher_secondary sch New York 11 st marys high school for women Paris Louis Avenue 我想提取城市地区的学名 模式是id(数字),后跟单个空格,然后是学校名称。名称可以有多个单词被单个空格分割,也可以有特殊字符。然后最小的两倍空间或更多的城市。同样,

我有一个数据如下

135 stjosephhrsecschool             london  DunAve
175865 stbele_higher_secondary sch  New York     
11 st marys high school for women   Paris  Louis Avenue 
我想提取城市地区的学名

模式是id(数字),后跟单个空格,然后是学校名称。名称可以有多个单词被单个空格分割,也可以有特殊字符。然后最小的两倍空间或更多的城市。同样,城市可能有多个单词分隔空间,或者可能有特殊字符。然后至少有2个空间或超过其面积。甚至面积也与学校名称和城市相同。但该区域可能存在,也可能不存在。如果不是,那么我希望面积为空

这是我试过的正则表达式

([\d]+) ([\w\s\S]+)\s\s+([\w\s\S]+)\s\s+([\w\s\S]*)
但是当这个正则表达式看到超过2个空格时,它不会停止。不知道如何修改它以适合我的数据

感谢所有的帮助。
如果我正确理解了您的问题,谢谢您-问题是生成的组包含尾随空格(例如,
“Louis Avenue”
)。如果是这样-您可以通过使用非贪婪修饰符(如
+?
*?
)来修复此问题:

([\d]+) ([\w\s\S]+?)\s\s+([\w\s\S]+?)\s\s+([\w\s\S]*?)?\s*
这将产生所需的输出:

val s1 = "135 stjosephhrsecschool             london  DunAve"
val s2 = "175865 stbele_higher_secondary sch  New York     "
val s3 = "11 st marys high school for women   Paris  Louis Avenue "

val r = """([\d]+) ([\w\s\S]+?)\s\s+([\w\s\S]+?)\s\s+([\w\s\S]*?)?\s*""".r

def matching(s: String) = s match {
  case r(a,b,c,d) => println((a,b,c,d))
  case _ => println("no match")
}

matching(s1) // (135,stjosephhrsecschool,london,DunAve)
matching(s2) // (175865,stbele_higher_secondary sch,New York,)
matching(s3) // (11,st marys high school for women,Paris,Louis Avenue)

您输入的内容不正确:城市名称必须大写。如果id(我猜,第二个捕获组匹配它们)总是小写的,并且cities是大写的,那么匹配这些字符串就很容易了。然而,我认为如果你的输入和你展示的一样,你会被卡住。假设正常的空格是分隔符,你可以使用,或者你只需要在双空格上拆分…谢谢Tzach Zohar。这正是我所需要的。我现在要学习这个非贪婪算子。我总是把自己限制在\w\s\d\d\w一个人。也许它们只是基本的。非常感谢你。