我是 REGEX 的新手,我试图只得到“She”和“Shell”这两个词,而不是这个程序(Groovy)的灰烬。我已经工作了一段时间。
saying = 'She wishes for Shells not ashes'
println saying
def pattern = ~/\bShe*\b/
def matcher = pattern.matcher(saying)
def count = matcher.getCount()
println "Matches = ${count}"
for (i in 0..<count) {
print matcher[i] + " "
}
Run Code Online (Sandbox Code Playgroud)
输出:她想要的是贝壳而不是灰烬火柴 = 1 她
REGEX 不像 Windows CMD 那样工作,例如 dir W* 来列出以 W 开头的文件夹或文件。我做错了什么?
非常感谢您回答这个问题
在正则表达式的*是不一样的一个通配符(匹配任何字符)。
它是一个量词,可以修饰紧接在它之前的任何内容并表示“零个或多个”。您的正则表达式匹配Sh后跟零个或多个e。所以它将匹配这些字符串:
Sh
She
Shee
Sheee
etc...
Run Code Online (Sandbox Code Playgroud)
您可能的意思是\w*匹配任何单词字符。
/\bShe\w*\b/
Run Code Online (Sandbox Code Playgroud)
另请注意,在正则表达式中,“单词字符”被视为字母、数字或下划线。因此,单词字符序列不同于人类语言中被视为“单词”的内容。事实上,单独使用正则表达式来正确识别单词并不容易,因此如果您需要匹配特定语言中的单词,您应该使用自然语言处理库和/或字典而不是正则表达式。