我正在处理法律引用。我想把引文分成四个部分。引文的一般格式如下:ABC诉DEF[年份]引用数据(权威)所以,我想把它分成四个部分——ABC诉DEF、年份、引文数据和权威。问题是,第一部分(即ABC v. DEF)可能有额外的圆括号,而第三部分(即引文数据)可能有额外的方括号和/或圆括号。例如,在下面的例子中
"Lubrizol Corporation, USA v. Asstt. DIT (International Taxation) [2013] 33 taxmann.com 424/60 SOT 118 (URO) (Mum. Trib.)"
第一部分是"Lubrizol Corporation, USA v. Asstt. DIT (International Taxation)"
,第二部分是"2013"
,第三部分是"33 taxmann.com 424/60 SOT 118 (URO)"
,最后一部分是"Mum. Trib."
我无法想出正确的正则表达式来做到这一点。有人能帮我解决这个问题吗?
使用extract
:
library(tidyr)
data.frame(txt) %>%
extract(txt,
into = c("First", "Sec", "Thrd", "Frth"),
regex = "(.+)\[(\d+)\](.*)\((.*)\)")
First Sec Thrd Frth
1 Lubrizol Corporation, USA v. Asstt. DIT (International Taxation) 2013 33 taxmann.com 424/60 SOT 118 (URO) Mum. Trib.
regex
部分看起来比实际更可怕:您只需完整地描述字符串,将希望提取的部分包装到括号中(捕获组的语法)
数据:
txt <- "Lubrizol Corporation, USA v. Asstt. DIT (International Taxation) [2013] 33 taxmann.com 424/60 SOT 118 (URO) (Mum. Trib.)"
text <- "Lubrizol Corporation, USA v. Asstt. DIT (International Taxation) [2013] 33 taxmann.com 424/60 SOT 118 (URO) (Mum. Trib.)"
pattern <- "(.*?)\s*\[(\d{4})\]\s*(.*?)\s*\((.*)\)"
regmatches(text, regexec(pattern, text))
[[1]]
[1] "Lubrizol Corporation, USA v. Asstt. DIT (International Taxation) [2013] 33 taxmann.com 424/60 SOT 118 (URO) (Mum. Trib.)"
[2] "Lubrizol Corporation, USA v. Asstt. DIT (International Taxation)"
[3] "2013"
[4] "33 taxmann.com 424/60 SOT 118 (URO)"
[5] "Mum. Trib."
如果你想要一个数据框架:
dat <- data.frame(citation = character(), year = numeric(), data = character(), Authority = character())
strcapture(pattern, text, dat)
citation year data Authority
1 Lubrizol Corporation, USA v. Asstt. DIT (International Taxation) 2013 33 taxmann.com 424/60 SOT 118 (URO) Mum. Trib.