【发布时间】:2017-01-24 18:39:16
【问题描述】:
我对正则表达式很陌生。我正在使用正则表达式:
/\w+/
要检查单词,很明显这会有标点问题,但我不太清楚如何更改这个正则表达式。例如,当我从我创建的类中运行此命令时:
Wordify.new.regex(/\w+/).string("This sentence isn't 'the best-example, isn't it not?...").display
我得到了输出:
-----------
this: 1
sentence: 1
isn: 2
t: 2
the: 1
best: 1
example: 1
it: 1
not: 1
-----------
如何调整正则表达式使其匹配带撇号的单词,例如:isn't 作为一个单词,但在搜索 时只会匹配 the >'the 或 the'。像 stack-overflow 这样的单词中间的连字符应该分别匹配 return stack 和 overflow,这已经做到了。
此外,单词不能以数字开头或结尾,例如 test1241 或 436test 应该变为 test,但 te7st 没问题。不应识别纯数字。
抱歉,我知道这是一个很大的问题,但我不确定从哪里开始使用正则表达式。如果可能的话,如果你能解释一下这个表达的意思,将不胜感激。
【问题讨论】:
-
请记住,在 Ruby 和许多正则表达式库中,
\w包含下划线_作为有效字符。 -
请注意,通过排除
"the'",您也排除了以"s"结尾的所有格形式,如"I like Chris' hat"。 -
除了字符串的第一个或最后一个字符外,您所说的每个“内部”字符都可以是字母、数字或撇号。内部字母可以是别的吗?
-
不,内部字符不能是其他任何东西,包括下划线等其他标点符号。