【问题标题】:Regular expression"\\|" in strsplit正则表达式“\\|”在 strsplit 中
【发布时间】:2012-08-04 07:25:26
【问题描述】:
>str= "AAC|Australia Acquisition Corp. - Ordinary Shares|S|N|D|100"
> strsplit(str,"\\|")
[[1]]
[1] "AAC"                                          
[2] "Australia Acquisition Corp. - Ordinary Shares"
[3] "S"                                            
[4] "N"                                            
[5] "D"                                            
[6] "100"   

我想知道\\| 是否等于|
也许\\|等于\|
为什么strsplit(str,"\\|") 可以工作?

【问题讨论】:

    标签: regex string r


    【解决方案1】:

    自从

    |
    

    在正则表达式中有特殊含义需要转义,所以要匹配|实际正则表达式

    \|
    

    由于\ 在声明字符串文字时又是一个特殊字符(您可能从\n 等中认出它),所以\ 需要自行转义。即,为了创建包含 \| 的字符串文字,您需要

    \\|
    

    【讨论】:

    • 我更喜欢反向思考表示;但是,是的,@aioobe 说的。
    【解决方案2】:

    因为它是一个带引号的字符串。 在带引号的字符串中,您可以通过使用\ 对其进行转义来包含" 字符。然后,\ 本身也需要转义为单个文字反斜杠。所以你引用的字符串意味着:\|

    现在,在正则表达式中,| 是一个特殊字符,除非被转义,否则不会按字面意思匹配。 R 中的正则表达式也使用反斜杠转义,因此字符串文字 "\\|" 表示字符串 \|,它是与 | 完全匹配的表达式。为什么"\\|" 起作用是因为这意味着完全匹配|,它作为您要拆分的字符串中的分隔符出现。

    更具体的reference to regular expressions in R 可能会很方便,但它和许多人一样引用perl regular expressions

    【讨论】:

    • 我认为你关于如何包含" 的第二句话只是令人困惑。
    • @aioobe 真的吗?如果不是因为它是转义字符,那么没有其他原因反斜杠实际上不会是反斜杠。它是转义字符,因此您可以在引号中包含引号。所有特殊的转义字符,如常见的换行符,都可以按字面意思包含在内,并且可以使用多种语言。
    【解决方案3】:

    根据我对正则表达式的了解很少,我认为“\|”本身可以工作(反斜杠转义管道。来源:Regular Expressions Reference

    【讨论】:

    • 会的。问题是 \ 是 R 中的一个特殊字符,所以字符串 \|用 \\| 表示作为 R 中的字符串文字。
    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多