尝试在ruby中执行此操作,但我认为该问题适用于处理POSIX类的任何regexp语言
目标:我想替换所有匹配[[:space:]]POSIX类的字符,除了a tab,使用常规单个空格.
希望字符类减法适用于POSIX类,我试过这个但是它不起作用
value.gsub!(/[ [[:space:]] - [\t] ]/, ' ')
Run Code Online (Sandbox Code Playgroud)
有没有办法重写这个,所以我可以匹配和替换类中的任何字符,[[:space:]]除了具有单个常规空格字符的选项卡?
更新
谢谢你的所有答案.
我在我的问题中搜索和定义的答案集中在[[:space:]]POSIX类上,因为这个类超出了ascii字符和控制字符,并且包括unicode中的不规则或非ascii空格等等.因此,虽然我同意我可以去构建我自己的类并找到每个可能的空格,我宁愿利用定义的现有类来包含它们并从中删除我想要的内容.
初步测试显示以下3个答案提供:
value.gsub!(/(?!\t)[[:space:]]/, ' ') # appears to be language agnostic regexp approach which is good if needed
value.gsub!(/[[:space:]&&[^\t]]/, ' ') # for languages that don't actually support true class subtraction
value.gsub!(/[^[:^space:]\t]/, ' ') # inverse or double negative approach
Run Code Online (Sandbox Code Playgroud)
产生预期的结果.我最喜欢前两个,但是因为我最初用ruby构建问题并且答案指出ruby实际上不支持类减法,而是演示了一个带负数的交集,我选择这个问题的答案,因为它似乎即使使用非POSIX类,这也很好.
你可以用
/[[:space:]&&[^\t]]/
Run Code Online (Sandbox Code Playgroud)
请参阅Rubular演示
细节
[ - 开始一个字符类(括号表达式)
[:space:] - 匹配空格字符的POSIX字符类&& - 字符类交集运算符[^\t] - 除标签之外的任何字符] - 字符类的结尾(括号表达式).