不确定如何在匹配后返回短语,还包括条件子句

时间:2015-02-23 22:00:17

标签: regex r

我是正则表达式的新手,过去两天我一直在使用在线教程。我想我理解了一些基础知识,但我不知道试图用我的一些数据来实现它。

我有几句话:

您好,欢迎。我的名字是 Amanda ,今天我可以为您提供哪些帮助? 你好,欢迎光临。我的名字是 Daniel L ,今天我可以为您提供哪些帮助? 你好,欢迎光临。我的名字是约翰·利文斯顿,今天我可以为您提供哪些帮助?

您好,我的名字是 Alyssa D ..我该如何帮助? 您好,我的名字是 John 。我该如何帮忙?
你好,欢迎光临。我的名字是 Felicia F 。,我今天如何为您提供帮助?

您好,欢迎。我的名字是 Alex 我今天如何为您提供帮助? 你好,欢迎光临。我的名字是 Alex P 我今天如何为您提供帮助?

我试图检索“#34;我的名字是"。

之后的名字。

问题是,有时会有名字,名字带首字母,或名字和姓氏。有时一段时间跟在名字后面,有时候是一个逗号,有时甚至根本没有(除了' how'这可能是标准)。

如何只返回全名?

现在我有:
    [Mm] [Yy] \ s * [Nn] [Aa] [Mm] [Ee] \ s * [Ii] [Ss] \ s *(\ w + \ s?\ w *)

但它并没有解决问题 它匹配整个短语,而不仅仅是名称
2.在Alex'的情况下,它返回' Alex How'

任何帮助将不胜感激。我似乎无法取得任何进展!哦,如果有帮助,我会使用R.

1 个答案:

答案 0 :(得分:3)

这使用strapplyc中的gsubfn package来提取捕获组(与正则表达式的括号部分匹配的部分)。

# test data
Lines <- "Hello and welcome. My name is Amanda, how may I assist you today?
Hello and welcome. My name is Daniel L, how may I assist you today?
Hello and welcome. My name is John Livingston , how may I assist you today?
Hello, my name is Alyssa D.. How can I help?
Hello, my name is John. How can I help?
Hello and welcome. My name is Felicia F., how may I assist you today?
Hello and welcome. My name is Alex how may I assist you today?
Hello and welcome. My name is Alex P how may I assist you today?"
L <- readLines(textConnection(Lines)) 

library(gsubfn)
strapply(L, "is ([A-Z][a-z]*( [A-Z][a-z]*[.]?)?)", simplify = TRUE)

,并提供:

[1] "Amanda"          "Daniel L"        "John Livingston" "Alyssa D."      
[5] "John"            "Felicia F."      "Alex"            "Alex P"   

以下是正则表达式的可视化:

is ([A-Z][a-z]*( [A-Z][a-z]*[.]?)?)

Regular expression visualization

Debuggex Demo