RegEx信,但不是一个单词的一部分

时间:2018-03-30 09:43:57

标签: regex kotlin

我在回答where are you正则表达式的下面的代码中,这可能是w r u等等。

我输入了how r u,正则表达式会将其理解为w r u,这在实际上是不正确的,如何解决?

val regEx = """((where|were|w)\s*(are|r)\s*(you|u)(?-i))""".toRegex()

fun main(args: Array<String>) {

    val matchResult = regEx.find("how r u")
    println("Hello, world!: ${matchResult?.value.orEmpty()}")
}

1 个答案:

答案 0 :(得分:0)

选项1

(^|\s+)

您可以使用行^ char的开头来获得更好的匹配器。如果你将它与像(^|\s+)这样的空白匹配器结合使用,你一定要确保只得到(where|were|w)

这两个词
(^|\s+)(where|were|w)\s*(are|r)\s*(you|u)(?-i)

(^|\s+)(where|were|w)\s*(are|r)\s*(you|u)\s+(?-i)

请参阅https://regex101.com/r/xyjrO4/1

选项2

\b

使用边界\b一词,请参阅java regex boundaries

\b(where|were|w)\s*(are|r)\s*(you|u)(?-i)

将其完全延伸

\b(where|were|w)\b\s*\b(are|r)\b\s*\b(you|u)\b(?-i)

(这不符合&#34; wru&#34;尽管如此)

或者

((where|were|\bw)\s*(are|r)\s*(you|u)(?-i))