使用扫描方法+正则表达式将字符串分解为单词,如果单词有`'`字符,则删除该字符及其后面的所有内容
Posted
技术标签:
【中文标题】使用扫描方法+正则表达式将字符串分解为单词,如果单词有`\'`字符,则删除该字符及其后面的所有内容【英文标题】:Break string into words using scan method + regexp, if word has `'` character, drop this character and everything after it使用扫描方法+正则表达式将字符串分解为单词,如果单词有`'`字符,则删除该字符及其后面的所有内容 【发布时间】:2021-12-02 04:20:06 【问题描述】:sample_string = "let's could've they'll you're won't"
sample_string.scan(/\w+/)
上面给了我:
["let", "s", "could", "ve", "they", "ll", "you", "re", "won", "t"]
我想要什么:
["let", "could", "they", "you", "won"]
一直在https://rubular.com/ 中玩耍并尝试像\w+(?<=')
这样的断言,但没有运气。
【问题讨论】:
一个小点:一些英文单词,例如“shoudn't've”有double apostrophes。有些甚至有triple contractions。我想你不关心处理这些。 感谢您提出这一点,您的假设是正确的。如果我必须处理双/三撇号,而不是删除字符,我不妨扩展它们以获得没有撇号的单词。 【参考方案1】:你可以使用
sample_string.scan(/(?<![\w'])\w+/)
sample_string.scan(/\b(?<!')\w+/)
请参阅Rubular demo。模式(它们是绝对同义词)匹配
(?<![\w'])
- 字符串中不紧跟单词或'
char 的位置
\b(?<!')
- 一个字边界位置,前面没有紧跟 '
字符
\w+
- 一个或多个单词字符。
见Ruby demo:
sample_string = "let's could've they'll you're won't"
p sample_string.scan(/(?<![\w'])\w+/)
# => ["let", "could", "they", "you", "won"]
【讨论】:
【参考方案2】:给定:
> sample_string = "let's could've they'll you're won't"
你可以做拆分和映射:
> sample_string.split.map|w| w.split(/'/)[0]
=> ["let", "could", "they", "you", "won"]
【讨论】:
以上是关于使用扫描方法+正则表达式将字符串分解为单词,如果单词有`'`字符,则删除该字符及其后面的所有内容的主要内容,如果未能解决你的问题,请参考以下文章