2017-11-17 1 views
0

Ich habe Strings mit Beschreibungen des Geschlechts, die ich aussortieren muss. wenn ich die folgenden Zum Beispiel habe,regex in R zu unterscheiden männlich/weiblich in Strings

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

Ich brauche string1 zu ändern „mehrere Weibchen“ zu sagen, und string2 zu sagen: „männlich und weiblich“.

Mit gsub, habe ich Probleme beim Schreiben einer Ersetzung, die string2 als von string1 unterscheidet, weil MALE in FEMALE verschachtelt ist. Mit „YEP“ als Bestätigung Zeichenfolge zuerst, ich versucht habe folgendes ohne Glück,

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) 

ich für Folge von Wildcard berücksichtigen müssen, weil nicht alle Strings als „Weibliche und Frau“ oder „Weibliche zeigen und MALE ", manchmal werden sie als" 1 FEMALE 12 MALES "oder" B WEIBLICH MIT 2X W WEIBLICH "usw. angezeigt.

Irgendwelche Ideen, wie man mit verschachtelten Strings mit Regex umgehen kann?

+0

Nicht genau, was Sie suchen in Bezug auf die zusätzlichen Zeichenfolgen, die Sie am unteren Rand Ihres Beitrags hinzugefügt haben, aber Sie können wahrscheinlich etwas wie '(?: ((?! 1 \ D) \ d +) (?: \ s * [az] \ b \ s *) * \ s +)? (\ b (?: FE)? MALES? \ b) 'um alle gesuchten Daten zu erhalten. – ctwheels

Antwort

0

Ok, ich habe das herausgefunden, gleich nachdem ich gepostet habe.

läuft gsub(".*FEMALE.*\\b(M)ALE.*", "YEP", string1) Ergebnisse in "FEMALE AND FEMALE", während gsub(".*FEMALE.*\\b(M)ALE.*", "YEP", string2) Ergebnisse in "YEP" ergibt. Das funktioniert also.

+0

Es gibt keine Notwendigkeit für die Klammern. – Sneftel