2017-11-17 250 views
0

我有我需要理清的性別描述的字符串。舉例來說,如果我有以下,R中的正則表達式來區分字符串中的男性/女性

string1 = "FEMALE AND FEMALE" 
string2 = "FEMALE AND MALE" 

我需要改變string1說「多名女性」,並string2說「男性和女性」。

使用gsub,由於MALE嵌套在FEMALE中,因此我無法編寫識別string2string1不同的替換。使用「YEP」作爲一個確認字符串第一,我已經試過,沒有運氣以下,

gsub(".*FEMALE.*MALE.*", "YEP", string1) 
gsub(".*FEMALE.*[^M]ALE.*", "YEP", string1) 
gsub(".*FEMALE.*[^\b]MALE.*", "YEP", string1) 
gsub(".*FEMALE.*(^\bMALE).*", "YEP", string1) 
gsub(".*FEMALE.*MALE.*", "YEP", string2) 
gsub(".*FEMALE.*[^M]ALE.*", "YEP", string2) 
gsub(".*FEMALE.*[^\b]MALE.*", "YEP", string2) 
gsub(".*FEMALE.*(^\bMALE).*", "YEP", string2) 

我需要考慮通配符的順序,因爲不是所有的字符串將顯示爲「女性與女性」或「女性,男性「,有時他們顯示爲」1女12 MALES「或」B女2X女「等

任何想法如何處理嵌套字符串使用正則表達式?

+0

不是很確定你在尋找附加字符串的方式,你添加在你的文章的底部附近,但你可以使用像'(?:(((??1 \ D)\ d +)( ?:\ s * [az] \ b \ s *)* \ s +)?(\ b(?:FE)?MALES?\ b)'獲取您要查找的所有數據。 – ctwheels

回答

0

好吧,我在發佈後立刻就明白了這一點。

運行gsub(".*FEMALE.*\\b(M)ALE.*", "YEP", string1)結果爲"FEMALE AND FEMALE",而gsub(".*FEMALE.*\\b(M)ALE.*", "YEP", string2)結果爲"YEP"。所以這個工作。

+0

不需要括號。 – Sneftel