R - 正则表达式:W 元字符在方括号内时不起作用
R - regex: W metacharacter not working when within square brackets
让我们采用以下字符串:
x <- " hello world"
我想提取第一个词。为此,我使用了以下正则表达式 ^\W*([a-zA-Z]+).*
并向后引用了第一组。
> gsub("^\W*([a-zA-Z]+).*", "\1", x)
[1] "hello"
它按预期工作。
现在,让我们在字符串中添加一个数字和下划线:
x <- " 0_hello world"
我将 \W
替换为 [\W_0-9]
以匹配新字符。
> gsub("^[\W_0-9]*([a-zA-Z]+).*", "\1", x)
[1] " 0_hello world"
现在,它不起作用,我不明白为什么。似乎将 \W
放在 []
中时会出现问题,但我不确定为什么。
不过,正则表达式适用于 online regex tester using PCRE。
我做错了什么?
快速解决方案是通过添加一个额外的参数来使用类似 Perl 的正则表达式 perl = TRUE
。
默认情况下,grep
使用扩展正则表达式(参见 ?regex
),其中字符 class 以 [:xxx:]
的格式定义。但是,我找不到字符 class 来完全匹配 \W
。
让我们采用以下字符串:
x <- " hello world"
我想提取第一个词。为此,我使用了以下正则表达式 ^\W*([a-zA-Z]+).*
并向后引用了第一组。
> gsub("^\W*([a-zA-Z]+).*", "\1", x)
[1] "hello"
它按预期工作。
现在,让我们在字符串中添加一个数字和下划线:
x <- " 0_hello world"
我将 \W
替换为 [\W_0-9]
以匹配新字符。
> gsub("^[\W_0-9]*([a-zA-Z]+).*", "\1", x)
[1] " 0_hello world"
现在,它不起作用,我不明白为什么。似乎将 \W
放在 []
中时会出现问题,但我不确定为什么。
不过,正则表达式适用于 online regex tester using PCRE。
我做错了什么?
快速解决方案是通过添加一个额外的参数来使用类似 Perl 的正则表达式 perl = TRUE
。
默认情况下,grep
使用扩展正则表达式(参见 ?regex
),其中字符 class 以 [:xxx:]
的格式定义。但是,我找不到字符 class 来完全匹配 \W
。