【问题标题】:Replace special characters with "just one" underscore if in sequence [duplicate]如果按顺序用“只有一个”下划线替换特殊字符[重复]
【发布时间】:2020-09-14 16:38:47
【问题描述】:

我有一个字符串,其中可以有空格和特殊字符,如果空格和特殊字符按顺序排列,我如何只用 一个 下划线替换它们。

我尝试过gsub(/[\W]/, '_'),但这会将每个特殊字符替换为下划线。

Example string: "This is a sample string & example"
Current output: "This_is_a_sample_string___example"
Expected output: "This_is_a_sample_string_example"

任何有关如何解决此问题的帮助都会非常棒。谢谢。

【问题讨论】:

  • 使用量词\W+
  • @opensource-developer,关于“我必须将 + 放在方括号之外,例如 [\W]+”,你误会了。你没有被推荐[\W]+。当他们说\W+ 时,他们的意思是\W+。反斜杠字符类(例如\W)不需要在字符类([])中。
  • @Thefourthbird 链接的问题可能对未来的访问者有用,但不是完全重复的。仅仅因为一个问题吸引了相似的答案并不意味着问题陈述是相同的。在这种情况下,问题是关于另一种语言的,并且会成为一个糟糕的近距离目标。
  • @WiktorStribiżew 为什么你总是试图关闭一个 related JavaScript 问题的 Ruby 问题?这个问题不是完全重复的,答案是特定语言的。
  • @WiktorStribiżew 解决方案是关于量词,而不是问题。因此,作为副本关闭显然是错误的。其次,AFAIK JavaScript 不使用 Onigmo 引擎,这可能导致每种语言的解决方案空间不同。链接问题很好,但它们不是在预期意义上的重复。

标签: regex


【解决方案1】:

使用/\W+/ 匹配连续的非单词字符

使用\W metacharacter+ 限定符来匹配一个或多个连续的非单词字符。 String#gsub 替换文本将仅用于每个完整匹配项,而不是匹配项中的每个字符。例如:

'This is a sample string & example'.gsub /\W+/, '_'
#=> "This_is_a_sample_string_example"

当然还有其他方法可以做到这一点,但这个解决方案适合您发布的用例。

【讨论】:

  • 请重新关闭Replace multiple characters by one character with regex。无需重新回答这些基本的正则表达式,接近错字,问题。
  • @WiktorStribiżew 您链接到的问题是关于另一种语言的相关(但不重复)问题,因此很难接近目标。
  • Regex + 量词在这些非 POSIX 正则表达式库中是相同的。 OP 对 Ruby 代码没有任何问题。
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多