【问题标题】:Remove non-alphabetic words from a sentence using regex使用正则表达式从句子中删除非字母词
【发布时间】:2015-01-30 02:47:28
【问题描述】:

是否可以删除不包含 a-z 字母的句子中的单词?我曾考虑过消极的环顾四周,但没有成功。

例如,

This is a 1-2-a3 sample 12 -- 7-8 sentence

变成

This is a 1-2-a3 sample sentence

假设除破折号之外的所有其他标点均已删除。

谢谢!

【问题讨论】:

    标签: regex regex-negation regex-lookarounds


    【解决方案1】:

    下面的正则表达式将匹配那些不包含字母的单词。

    (?<!\S)[^a-zA-Z\s]+(?!\S)
    

    DEMO

    只需用空字符串替换那些匹配的单词即可获得所需的输出。 (?&lt;!\S) 否定的lookbehind 断言匹配不会以非空格字符开头。 (?!\S) 否定前瞻,断言匹配后不会跟非空格字符。

    【讨论】:

    • 如果您还想删除前导空格,请使用 \s*(?&lt;!\S)[^a-zA-Z\s]+(?!\S)regex101.com/r/zB3uD4/2
    • (?=\s)(?!\S) 有什么区别?另外,单词边界不是更简单吗?
    • @Crazysheep (?=\s) 与行尾存在的字符串不匹配。但它(?!\S) 会匹配。只需使用 [^a-zA-Z\s]+(?!\S) 正则表达式来对抗这个 sentence 7-8 字符串。
    • 以防万一有人使用 R 来完成这项工作:"(?
    • 他必须要开启pert=T参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2014-06-21
    • 2021-10-07
    相关资源
    最近更新 更多