如何创建一个正则表达式来匹配字符串开头的单词?
我们正在寻找匹配 别说了在一个字符串的开头,任何东西都可以跟随它。
例如,表达式应该匹配:
stop stop random stopping
如果希望只匹配以 别说了开头的行,请使用
^stop
如果您希望匹配以单词 别说了开头、后跟一个空格的行:
^stop\s
或者,如果您希望匹配以单词 别说了开头、但后跟空格或任何其他可以使用的非单词字符的行(在正则表达式风格允许的情况下)
^stop\W
另一方面,下面的内容在大多数正则表达式风格的字符串开头匹配一个单词(在这些风格中,什么匹配 W的反义词)
^\w
如果您的口味没有 什么快捷方式,可以使用
^[a-zA-Z0-9]+
注意,第二个习语只与字母和数字相匹配,没有任何符号。
检查您的正则表达式风格手册,以了解哪些快捷方式是允许的,它们到底匹配哪些内容(以及它们如何处理 Unicode)。
/stop([a-zA-Z])+/
将匹配任何停止字(停止,停止,停止等)
但是,如果您只想匹配字符串开头的“ stop”
/^stop/
将做: D
试试这个:
/^stop.*$/
说明:
如果你想强制停止后跟一个空格,你可以像这样修改正则表达式:
/^stop\s+.*$/
注意: 还要记住,上面的正则表达式要求停止字后面跟一个空格!所以它不会匹配只包含: 别说了的行
如果你想匹配任何以“停止”开头的东西,包括“停止前进”、“停止”和“停止”使用:
如果您想匹配 字停止后跟任何东西,如“停止前进”,“停止这个”,但不“停止”和不“停止”使用:
我建议不要使用简单的正则表达式来解决这个问题。有太多的单词是由其他不相关的单词组成的子串,你可能会因为过度使用已经提供的简单解决方案而把自己逼疯。
您至少需要一个简单的词干分析算法(请尝试 Porter 词干分析器; 大多数语言中都有可用的免费代码)来首先处理文本。将处理过的文本和预处理过的文本保存在两个单独的空格分割数组中。确保每个非字母字符在此数组中也有自己的索引。不管你在过滤什么单词,把它们也删掉。
下一步将是找到与您的词干‘ stop’单词列表匹配的数组索引。从未处理的数组中删除它们,然后在空格上重新联接。
这只是稍微复杂一点,但将是更可靠的方法。如果您对更面向 NLP 的方法的价值有任何疑问,您可能想要对 粗鲁的错误进行一些研究。
如果您希望匹配单词 别说了之后的任何内容,而且不仅仅是在行的开头,您可以使用: \bstop.*\b-单词后跟一行。
\bstop.*\b
或者,如果您想匹配字符串中的单词,请使用 \bstop[a-zA-Z]*-只有以 < em > stop 开头的单词。
\bstop[a-zA-Z]*
或者行的开头用 别说了-^stop[a-zA-Z]*表示单词 only-只说第一个词。 全线 ^stop.*-只是字符串的第一行。
^stop[a-zA-Z]*
^stop.*
如果您想匹配以 stop 开头的每个字符串(包括换行符) ,请使用: /^stop.*/s-从止点开始的多行字符串。
/^stop.*/s
如果您希望单词以“ stop”开头,可以使用以下模式。 “ ^ stop”
这将匹配以 stop 开头的单词,然后是任何单词。
就像@SharadHolani 说的,这不会和“ 别说了”开头的每个单词都匹配
。只有当它是在一行的开头,如“ 别去了”。 @ Waxo 给出了正确答案:
这一个是 轻轻地更好,如果你想匹配任何单词开头的“ 别说了”,只包含字母从 从 A 到 Z。
\bstop[a-zA-Z]*\b
这个可以匹配所有的
停止 强 > (1) Stop Random (2) 停止 (3) 要 别说了(4) 请 别说了(5)
停止 强 > (1)
Stop Random (2)
停止 (3)
要 别说了(4)
请 别说了(5)
但是
/^stop[a-zA-Z]*/
将只匹配(1)到(3) ,但不匹配(4) & (5)
/^stop*$/i
I -万一它是区分大小写的。
你能试试这个吗:
https://regex101.com/r/P3qfKG/1
Reg = /stop(\w+| [^ ]+|$)/gm
/stop(\w+| [^ ]+|$)/gm
同时选择“停止”和“开始”,并选择“停止”和“下一个词”;