用于查找包含 space 和标点符号的精确匹配的正则表达式
regular expression to find exact matching containing a space and a punctuation
我正在浏览一个包含格式如下例的文本值(名称)的数据集:
M.Joan (13-2)
A.Alfred (20-13)
F.O'Neil (12-231)
D.Dan Fun (23-3)
T.Collins (51-82) J.Maddon (12-31)
有些字符串有两个名字,比如
M.Joan (13-2) A.Alfred (20-13)
我只想从字符串中提取名称。
有些名字很容易提取,因为它们没有 spaces 或任何东西。
然而有些很难,因为它们有一个 space 就像上面最后一个。
name_pattern = "[A-Z][.][^ (]{1,}"
base <- str_extract_all(baseball1$Managers, name_pattern)
当我使用此代码提取名称时,即使对于带有 space 或标点符号的名称,它也能很好地工作。但是,提取的名称末尾有一个 space。我想知道我是否能找到“(”、一个 space 和一个括号的确切模式。
输出:
[[1]]
[1] "Z.Taylor "
[[2]]
[1] "Z.Taylor "
[[3]]
[1] "Z.Taylor "
[[4]]
[1] "Z.Taylor "
[[5]]
[1] "Y.Berra "
[[6]]
[1] "Y.Berra "
您可以使用
x <- c("M.Joan (13-2) ", "A.Alfred (20-13)", "F.O'Neil (12-231)", "D.Dan Fun (23-3)", "T.Collins (51-82) J.Maddon (12-31)", "T.Hillman (12-34) and N.Yost (23-45)")
regmatches(x, gregexpr("\p{Lu}.*?(?=\s*\()", x, perl=TRUE))
或str_extract_all
版本:
str_extract_all(baseball1$Managers, "\p{Lu}.*?(?=\s*\()")
参见regex demo。
匹配
\p{Lu}
- 大写字母
.*?
- 除了换行符之外的任何字符,尽可能少,直到第一次出现(但不包括在匹配中,因为 (?=...)
是一个非消耗性结构)...
(?=\s*\()
- 正前瞻,紧靠当前位置的右侧,需要存在:
\s*
- 0+ 个空白字符
\(
- 文字 (
.
我正在浏览一个包含格式如下例的文本值(名称)的数据集:
M.Joan (13-2)
A.Alfred (20-13)
F.O'Neil (12-231)
D.Dan Fun (23-3)
T.Collins (51-82) J.Maddon (12-31)
有些字符串有两个名字,比如
M.Joan (13-2) A.Alfred (20-13)
我只想从字符串中提取名称。 有些名字很容易提取,因为它们没有 spaces 或任何东西。 然而有些很难,因为它们有一个 space 就像上面最后一个。
name_pattern = "[A-Z][.][^ (]{1,}"
base <- str_extract_all(baseball1$Managers, name_pattern)
当我使用此代码提取名称时,即使对于带有 space 或标点符号的名称,它也能很好地工作。但是,提取的名称末尾有一个 space。我想知道我是否能找到“(”、一个 space 和一个括号的确切模式。
输出:
[[1]]
[1] "Z.Taylor "
[[2]]
[1] "Z.Taylor "
[[3]]
[1] "Z.Taylor "
[[4]]
[1] "Z.Taylor "
[[5]]
[1] "Y.Berra "
[[6]]
[1] "Y.Berra "
您可以使用
x <- c("M.Joan (13-2) ", "A.Alfred (20-13)", "F.O'Neil (12-231)", "D.Dan Fun (23-3)", "T.Collins (51-82) J.Maddon (12-31)", "T.Hillman (12-34) and N.Yost (23-45)")
regmatches(x, gregexpr("\p{Lu}.*?(?=\s*\()", x, perl=TRUE))
或str_extract_all
版本:
str_extract_all(baseball1$Managers, "\p{Lu}.*?(?=\s*\()")
参见regex demo。
匹配
\p{Lu}
- 大写字母.*?
- 除了换行符之外的任何字符,尽可能少,直到第一次出现(但不包括在匹配中,因为(?=...)
是一个非消耗性结构)...(?=\s*\()
- 正前瞻,紧靠当前位置的右侧,需要存在:\s*
- 0+ 个空白字符\(
- 文字(
.