R中的正则表达式选择以新行结尾的句子

时间:2016-11-06 23:14:53

标签: r regex

我的理解是R使用扩展正则表达式或类似Perl的正则表达式。我搜索了SO和网络以寻找这个正则表达式问题的解决方案,但我已经空了:

在R中我有一个文本文件向量。每个元素由几个段落组成。我想从每个元素中提取几个句子来创建一个带有这个文本子集的新向量。我想要提取的句子遵循可预测的模式。

package Project1;

import java.util.Scanner;

public class Code1 {

    static String myStr;
    static double radius;
    static double answer;
    static double pie;
    public static void main(String[] args){
        Name();
        Info();
        Math();
        myPrint();
    }
    public static void Name(){
    Scanner input = new Scanner(System.in);
        System.out.println("What Is Your Name");
        myStr = input.nextLine();
    }
    public static void Info(){
        Scanner input = new Scanner(System.in);
        String myStr;

        System.out.println("What is Your Phone Number");
        myStr = input.nextLine();
        System.out.println("What is Your Age");
        myStr = input.nextLine();
        System.out.println("What is Your Postal Code");
        myStr = input.nextLine();

    }
    public static void Math(){
        double radius,answer;
        double pie = 3.14;
        Scanner input = new Scanner(System.in);

        System.out.println("What is the Area of the Circle");
        radius = input.nextDouble();
        answer = pie *(radius * radius);

    }
    public static void myPrint(){
        System.out.print("The answer is:"+ answer);

    }
}

我想提取“家庭笔记”,“房子”或“笔记”和第一个“\ n”之间的所有文字。 “房子笔记”,“房子”或“笔记”这些词可能是文件中的其他位置,但我对它们的第一次出现感兴趣。

text <- c("AND \n \n house notes: text text/text.\n \n text text \n text",
          "AND \n \n notes: text text/text.\n \n text text \n text",
          "AND \n \n house: text text/text.\n \n text text \n text")

我可以在php > output "house notes: text text/text.\n", "notes: text text/text.\n ", "house: text text/text.\n " 中使用它,但不能使用R。

1 个答案:

答案 0 :(得分:2)

您应该注意,您使用文字\n(反斜杠+ n)对字符串进行了测试,并且您使用了PCRE正则表达式(\w++包含占有量词)并且您需要在基本R正则表达式函数中使用perl=TRUE来使用这样的正则表达式。

由于您只想将特定字符串中的文本提取到换行符,因此最佳模式是一组备选项,然后是否定字符类(匹配任何字符,但\n)和换行符:

> text <- c("AND \n \n house notes: text text/text.\n \n text text \n text",
+           "AND \n \n notes: text text/text.\n \n text text \n text",
+           "AND \n \n house: text text/text.\n \n text text \n text")
> 
> pat = "(house( notes)?|notes):[^\n]*\n"
> regmatches(text, gregexpr(pat, text))
[[1]]
[1] "house notes: text text/text.\n"

[[2]]
[1] "notes: text text/text.\n"

[[3]]
[1] "house: text text/text.\n"

详细

  • (house( notes)?|notes) - 与househouse notesnotes
  • 匹配的群组
  • : - 冒号
  • [^\n]* - 与任何字符匹配的否定字符类,但换行符
  • \n - 新行。