【问题标题】:Regular expression to match all non-alphanumerics except apostropes in contractions正则表达式匹配所有非字母数字,除了收缩中的撇号
【发布时间】:2013-10-30 03:18:19
【问题描述】:

我正在尝试对一串英文文本进行标记,这样我就可以得到一个没有任何标点符号的单词序列,但同时我想留下收缩(比如 don't and won't)和所有格名词(如 Steve'sDrew's)完好无损。我正在尝试使用正则表达式来解决这个问题,但我对它们还是陌生的。

基本上,我想要一个正则表达式,它将匹配所有非字母数字字符序列,除了被字母数字字符包围的撇号,例如前面提到的示例。是否可以用正则表达式做到这一点?

【问题讨论】:

  • 用 '.匹配后,拆分应如何返回这些单词的详细信息取决于您的语言。

标签: regex tokenize alphanumeric non-alphanumeric


【解决方案1】:

你的问题对我来说不是很清楚。但如果我解释正确,下面的正则表达式应该可以完成这项工作

\b[\w']+\b

regex101 demo

【讨论】:

  • 这将不匹配“Ross'”,这是以“s”结尾的名词的所有格的正确拼写(即你不写“Ross's”),所以你不能最后使用\b,而不是前面由于“'twas”和“'tis”
【解决方案2】:

我不明白你的正则表达式试图匹配什么,但我认为这会匹配你想要的:

(?i)(?<=^|\s)([a-z]+('[a-z]*)?|'[a-z]+)(?=\s|$)

这匹配可以选择以撇号后跟 0-n 个字母或撇号后跟字母结尾的“单词”,这匹配以下边缘情况:

  • 东西
  • 杰克的
  • 罗斯

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多