【问题标题】:Regex: scrub punctuation except if inside a word?正则表达式:擦洗标点符号,除非在单词中?
【发布时间】:2020-04-27 12:33:19
【问题描述】:

我不擅长正则表达式,但我有这个可以从字符串中删除标点符号。

let text = 'a user provided string'
let pattern = /(-?\d+(?:[.,]\d+)*)|[-.,()&$#![\]{}"']+/g;
text.replace(pattern, "$1");

我正在寻找一种方法来修改它,以便它保留在单词中的标点符号,例如

  • 一些夸张的词
  • a_snake_case
  • or.even.a.dot.word

都应该保留标点符号。我将如何修改它?

【问题讨论】:

  • double--hyphenated--word 呢?
  • @Nick 一开始我会用一个标点符号吗?
  • 您能说明一下您的用例吗?为什么需要清除用户字符串的标点符号?了解原因可能使我们能够提出更清洁/更简单的替代方案。
  • @Marie 我正在尝试将一个句子分解成单词。然而,该句子应假定有标点符号(例如括号、逗号等)。现在删除 all 标点符号是不够的,因为可能有散布标点符号的单词/标记(例如some.word
  • 我很好奇,你为什么要把一个句子分成单词?

标签: regex


【解决方案1】:

一个选项可能是将\d 更改为\w 以将匹配扩展到单词字符并在捕获组中的字符类中添加连字符。

在替换使用组1中。

(\w+(?:[.,-]\w+)*)|[-.,()&$#![\]{}"']+

Regex demo

如果你想匹配多个连字符、逗号或点,你可以重复字符类[.,-]+

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多