【问题标题】:R Regular expression for string containing full stopsR包含句号的字符串的正则表达式
【发布时间】:2014-09-12 10:51:32
【问题描述】:

我有一堆字符串,其中一些以..t. 结尾。我正在尝试找到一个正则表达式来匹配这些字符串,但是处理句号让我很头疼!

我试过了

grep('^.+(..t.)$', myStrings)

但这也匹配诸如w...gate之类的字符串。我想我处理的句号不正确。任何帮助都非常感谢。

注意:我在 R 中使用 grep。

【问题讨论】:

    标签: regex r


    【解决方案1】:

    由于您只检查字符串的结尾是否以..t. 结尾,因此您可以在模式中消除^.+

    正则表达式语法中的点.character of special meaning,它匹配除换行符序列以外的任何字符。要匹配文字点或任何其他具有特殊含义的字符,您需要转义 \\

    > x <- c('foo..t.', 'w...gate', 'bar..t.foo', 'bar..t.')
    > grep('\\.{2}t\\.$', x)
    # [1] 1 4
    

    或者将该字符放在character class 中。

    > x <- c('foo..t.', 'w...gate', 'bar..t.foo', 'bar..t.')
    > grep('[.]{2}t[.]$', x)
    # [1] 1 4
    

    注意:我使用范围运算符\\.{2} 匹配两个点,而不是转义两次\\.\\.

    【讨论】:

    • 这绝对更好!谢谢。将等待一天,如果没有更好的解决方案出现(我怀疑)将接受答案。
    【解决方案2】:

    k,更好的谷歌搜索提供了答案;

     grep("^.+(\\.\\.t\\.)$", myStrings)
    

    这是可行的,因为我们需要在 R 中将这一点转义为 \\.

    【讨论】:

    • 我知道 - 在 1 分钟内回答表明研究不力。我想我刚刚找到了一个更好的谷歌搜索词 - 真的没有试图发送垃圾邮件。
    • 假设你有一个字符串str1 &lt;- c("something..t.", "w...gate", "w1..tg", "w2..t.g5", "w1...t.") 代码匹配1和5。这是故意的吗?
    • 是的,这是有意的 - 他的字符串必须以 ..t. 结尾。在此之前的任何内容都是有效的
    【解决方案3】:

    点(.)只匹配单个字符。要删除点的含义,你应该在点字符(\\)之前使用双斜杠。

    试试这个.....

    grep('^.+(\\.\\.t\\.)$', myStrings)
    

    Satheesh 应用程序

    【讨论】:

    • 是的,大卫,你是对的。必须像这样逃避 \ grep('^\\.+(\\.\\.t\\.)$', myStrings)
    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多