提取以下字符串中的第二次出现
Extracting the second occurrence in the following string
考虑以下具有预期输出的字符串。
"NE-390-SM-04" --> "390-SM-04"
"90055-SL-01-J" --> "90055-SL-01"
"NE-1478-SL-02" --> "1478-SL-02"
"87007-QM-01-J" --> "87007-QM-01"
"NE-9315-BM-01-A" --> "9315-BM-01"
"3121-SP-01" --> "3121-SP-01"
"1639-YL-01" --> "1639-YL-01"
"NE-9922-WM-01-J" --> "9922-WM-01"
"ND-2498-YL-01" --> "2498-YL-01"
"C-4008-PP-03-J" --> "4008-PP-03"
"876-C-4008-PP-03-J-234" --> "4008-PP-03"
有没有办法提取出现(尤其是第二次出现)的
[0-9]+-[a-zA-Z]+-[0-9]+
在 R 中?
我能够使用正则表达式引用这些部分:([0-9]+-[a-zA-Z]+-[0-9]+)
我对符合上述模式的最中心部分感兴趣。
希望我已经说清楚了。如果您需要任何说明,请告诉我。
你可以在开头使用惰性点匹配模式,在结尾使用贪心点匹配模式,并在替换模式中使用带有反向引用的捕获组,和 确保中间的字母数至少为 2 和限制量词 {2,}
:
x <- c("NE-390-SM-04", "90055-SL-01-J", "NE-1478-SL-02", "87007-QM-01-J", "NE-9315-BM-01-A", "3121-SP-01", "1639-YL-01", "NE-9922-WM-01-J", "ND-2498-YL-01", "C-4008-PP-03-J", "876-C-4008-PP-03-J-234")
sub("^.*?([0-9]+-[a-zA-Z]{2,}-[0-9]+).*", "\1", x)
参见R demo and a regex demo。
图案详情:
^.*?
- 字符串的开头和尽可能少的零个或多个字符
([0-9]+-[a-zA-Z]{2,}-[0-9]+)
- 您的模式匹配 1+ 个数字、连字符、2+ 个字母、连字符、1+ 个数字
.*
- 任何 0+ 个字符,直到字符串末尾为止。
如果您不使用 {2,}
和字母匹配子模式,您将在最后一个 876-C-4008-PP-03-J-234
.
中得到 876-C-4008
考虑以下具有预期输出的字符串。
"NE-390-SM-04" --> "390-SM-04"
"90055-SL-01-J" --> "90055-SL-01"
"NE-1478-SL-02" --> "1478-SL-02"
"87007-QM-01-J" --> "87007-QM-01"
"NE-9315-BM-01-A" --> "9315-BM-01"
"3121-SP-01" --> "3121-SP-01"
"1639-YL-01" --> "1639-YL-01"
"NE-9922-WM-01-J" --> "9922-WM-01"
"ND-2498-YL-01" --> "2498-YL-01"
"C-4008-PP-03-J" --> "4008-PP-03"
"876-C-4008-PP-03-J-234" --> "4008-PP-03"
有没有办法提取出现(尤其是第二次出现)的
[0-9]+-[a-zA-Z]+-[0-9]+
在 R 中?
我能够使用正则表达式引用这些部分:([0-9]+-[a-zA-Z]+-[0-9]+)
我对符合上述模式的最中心部分感兴趣。
希望我已经说清楚了。如果您需要任何说明,请告诉我。
你可以在开头使用惰性点匹配模式,在结尾使用贪心点匹配模式,并在替换模式中使用带有反向引用的捕获组,和 确保中间的字母数至少为 2 和限制量词 {2,}
:
x <- c("NE-390-SM-04", "90055-SL-01-J", "NE-1478-SL-02", "87007-QM-01-J", "NE-9315-BM-01-A", "3121-SP-01", "1639-YL-01", "NE-9922-WM-01-J", "ND-2498-YL-01", "C-4008-PP-03-J", "876-C-4008-PP-03-J-234")
sub("^.*?([0-9]+-[a-zA-Z]{2,}-[0-9]+).*", "\1", x)
参见R demo and a regex demo。
图案详情:
^.*?
- 字符串的开头和尽可能少的零个或多个字符([0-9]+-[a-zA-Z]{2,}-[0-9]+)
- 您的模式匹配 1+ 个数字、连字符、2+ 个字母、连字符、1+ 个数字.*
- 任何 0+ 个字符,直到字符串末尾为止。
如果您不使用 {2,}
和字母匹配子模式,您将在最后一个 876-C-4008-PP-03-J-234
.
876-C-4008