Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式模式以字符串开头,以空格结尾_Regex_Scala - Fatal编程技术网

Regex 正则表达式模式以字符串开头,以空格结尾

Regex 正则表达式模式以字符串开头,以空格结尾,regex,scala,Regex,Scala,我正试着从长线中得到一部分线。 原始行看起来像 val j=“(…),昵称=sally,25岁,学生,来自西班牙”(…)” 我只想得到这个 我认为正则表达式模式应该是 pattern=“昵称=([a-zA-Z0-9,])*(.+)\s$ 但它不像我想要的那样工作 有什么好的建议吗?试试看 pattern= "nickname\=([^\s])*" 试一试 模式昵称=([a-zA-Z0-9,])*(.+)\s$未获得正确匹配的原因是: 昵称不会在组中捕获,并且仅存在多个匹配

我正试着从长线中得到一部分线。 原始行看起来像

val j=“(…),昵称=sally,25岁,学生,来自西班牙”(…)”

我只想得到这个

我认为正则表达式模式应该是
pattern=“昵称=([a-zA-Z0-9,])*(.+)\s$
但它不像我想要的那样工作

有什么好的建议吗?

试试看

pattern= "nickname\=([^\s])*"
试一试


模式
昵称=([a-zA-Z0-9,])*(.+)\s$
未获得正确匹配的原因是:

  • 昵称不会在组中捕获,并且仅存在多个匹配项
  • 像这样重复整个捕获组
    ([a-zA-Z0-9,])*
    将只捕获上一次迭代的值,在本例中为a
  • \s$
    匹配一个空格字符,然后断言字符串的结尾
如果应该有昵称部分(包括末尾的逗号),则必须将字符类本身重复一次或多次

有了这些变化,该模式将如下所示:

\b(nickname=[a-zA-Z0-9,]+)(.+)\s$


如果您不需要第二个捕获组,只想获得匹配项:

\bnickname=[a-zA-Z0-9,]+

或结尾不带逗号:

\bnickname=[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)+

例如,字符串末尾带有空格字符:

val regex: Regex = """\bnickname=[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)+""".r
val j = """(...), nickname=sally,25,student, from="Spain", (...) """
regex.findFirstIn(j).foreach(println)
输出

nickname=sally,25,student

模式
昵称=([a-zA-Z0-9,])*(.+)\s$
未获得正确匹配的原因是:

  • 昵称不会在组中捕获,并且仅存在多个匹配项
  • 像这样重复整个捕获组
    ([a-zA-Z0-9,])*
    将只捕获上一次迭代的值,在本例中为a
  • \s$
    匹配一个空格字符,然后断言字符串的结尾
如果应该有昵称部分(包括末尾的逗号),则必须将字符类本身重复一次或多次

有了这些变化,该模式将如下所示:

\b(nickname=[a-zA-Z0-9,]+)(.+)\s$


如果您不需要第二个捕获组,只想获得匹配项:

\bnickname=[a-zA-Z0-9,]+

或结尾不带逗号:

\bnickname=[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)+

例如,字符串末尾带有空格字符:

val regex: Regex = """\bnickname=[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)+""".r
val j = """(...), nickname=sally,25,student, from="Spain", (...) """
regex.findFirstIn(j).foreach(println)
输出

nickname=sally,25,student
试试这个:昵称=[\w,]+(?=,)试试这个:昵称=[\w,]+(?=,)