Answers:
如果您只想匹配以停止使用开头的行
^stop
如果要匹配以单词stop开头的行,然后以空格匹配
^stop\s
或者,如果您希望匹配以单词stop开头但后跟空格或任何其他非单词字符的行,则可以使用(您的正则表达式允许)
^stop\W
另一方面,在大多数正则表达式中,后面的内容与字符串开头的单词匹配(在这些\ w中与\ W的相反)
^\w
如果您的风味没有\ w快捷方式,则可以使用
^[a-zA-Z0-9]+
请注意,第二个习惯用法只会匹配字母和数字,而不会匹配任何符号。
查看您的regex风格手册,以了解允许使用哪些快捷方式以及它们与之完全匹配(以及它们如何处理Unicode)。
^stop\b
,这将允许任何边界,包括行尾
试试这个:
/^stop.*$/
说明:
如果您想在该停止符后加一个空格,则可以像下面这样修改RegEx:
/^stop\s+.*$/
注意:还请记住,上面的RegEx要求停用词后面必须有一个空格!因此它将与仅包含以下内容的行不匹配:停止
如果您想在单词停顿后匹配所有内容,不仅可以在行首处使用\bstop.*\b
-- 单词后跟行
或者,如果您想匹配字符串中的单词,请使用\bstop[a-zA-Z]*
- 仅以stop开头的单词
或^stop[a-zA-Z]*
仅以单词开头的行开始-仅第一个单词
整行^stop.*
- 仅字符串的第一行
而且,如果您想匹配以stop开头的所有字符串(包括换行符),请使用:/^stop.*/s
- 以stop开头的多行字符串
就像@SharadHolani说的那样。这不会匹配以“ stop ” 开头的每个单词
。仅当它在“ 停止前进 ”之类的行的开头时。@Waxo给出了正确的答案:
这一个是略好,如果你想匹配与“开头的任何单词停止 ”和包含什么,但字母从A到Z。
\bstop[a-zA-Z]*\b
这将匹配所有
停止(1)
随机停止(2)
正在停止(3)
想要停止(4)
请停止(5)
但
/^stop[a-zA-Z]*/
只会匹配(1)直到(3),而不匹配(4)&(5)
/stop([a-zA-Z])+/
将匹配任何停用词(stop,stopped,stopping等)
但是,如果您只想在字符串的开头匹配“ stop”
/^stop/
会做:D
我建议不要使用简单的正则表达式方法来解决此问题。太多的单词是其他不相关单词的子字符串,并且您可能会疯狂地尝试过度适应已经提供的更简单的解决方案。
您将需要至少一个幼稚的词干算法(尝试波特词干器;大多数语言都有可用的免费代码)来首先处理文本。将此处理的文本和预处理的文本保留在两个单独的以空格分隔的数组中。确保每个非字母字符在此数组中也都有自己的索引。无论您要过滤的是什么单词列表,都应阻止它们。
下一步将是找到与词干“停止”词列表匹配的数组索引。从未处理的数组中删除那些,然后重新加入空格。
这只是稍微复杂一点,但是将是一种更加可靠的方法。如果您对更面向NLP的方法的价值有任何疑问,则可能需要对集群错误进行一些研究。
如果希望单词以“ stop”开头,则可以使用以下模式。“ ^停止。*”
这将匹配以stop开头的单词,然后是任何单词。
"^stop"
吗?
code
String line = "stopped";
String pattern = "^stop";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
System.out.println(m.find( )); //prints true
System.out.println(line.matches(pattern)); //prints false