我正在研究来自写入调查领域的字符串,该字段询问了一个主要的研究领域。
对于“艺术”部分,我希望匹配所有类型的艺术学位,但明确排除文科,烹饪艺术和语言艺术。
此代码正确排除了“文科”,但我无法列出要排除的多项内容。
我在R中使用grel函数和perl兼容的regexp。
field_1_1_arts <-c("\\b(dance|ballet|design|film|(?<!liberal )arts?|music|photograph(ic|y)|theat(er|re)|performing|visual)\\b")
data$field_1_1_arts <- grepl(field_1_1_arts,data$major_fields,ignore.case=TRUE, perl=TRUE)
我试过了:
#this allows both liberal and culinary to pass
field_1_1_arts <-c("\\b(dance|ballet|design|film|(?<!liberal )arts?|(?<!culinary )arts?|music|photograph(ic|y)|theat(er|re)|performing|visual)\\b")
#this gives an invalid expression error
field_1_1_arts <-c("\\b(dance|ballet|design|film|(?<!(liberal|culinary) )arts?|music|photograph(ic|y)|theat(er|re)|performing|visual)\\b")
答案 0 :(得分:2)
要排除超过libral
,只需添加更多负面外观,例如:
"\\b(dance|ballet|design|film|(?<!liberal )(?<!culinary )(?<!language )arts?|music|photograph(ic|y)|theat(er|re)|performing|visual)\\b"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
请参阅regex demo
您还可以使用|
:
"\\b(dance|ballet|design|film|(?<!liberal |culinary |language )arts?|music|photograph(ic|y)|theat(er|re)|performing|visual)\\b"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
请参阅another demo