3 Réponses :


9
votes

Voici de deux façons de le faire:

One: Trouvez la chaîne souhaitée et remplacez la chaîne entière avec le bit trouvé. (Connu sous le nom de renvoi arrière) xxx

Ceci fonctionne parce que:

  • Vous utilisez une perférence \\ 1 pour faire référence à la chaîne correspondante des parenthèses (. *)
  • Puisque vous voulez exclure les parenthèses de la chaîne réelle, vous devez vous échapper avec \\ ( et \\) . .

    deux: Remplacez tous les bits que vous ne voulez pas avec des chaînes vides: xxx

    Ceci fonctionne car Le | est similaire à ou .


4 commentaires

Existe-t-il une documentation pour le \\ 1 utilisation? J'ai lu à ce sujet au bas de? Grep mais je ne l'ai pas compris.


@BrandOnbertelsen J'ai légèrement élargi la réponse, mais en général, mon conseil est d'apprendre regex de n'importe où, mais les Docs R. Par exemple, voici un Tutoriel sur les backreferences


@Brandonbertelsen J'ai également ajouté l'approche opposée, c'est-à-dire remplacer les bits que vous ne voulez pas avec des chaînes vides.


Appréciez l'attention supplémentaire ici et le lien vers le tutoriel.



3
votes

Version QDAP 1.1.0 peut faire ceci: xxx pré>

rendements: p> xxx pré>

si vous ne faites pas beaucoup de choses, alors obtenez qdap Peut-être un peu de surpuger. p>

EDIT: avec l'exemple de Josh ... P>

> x <- "This is (a) string (Yay, string!)" 
> bracketX(x)
[1] "This is string"
> bracketXtract(x)
[1] "a"            "Yay, string!"


0 commentaires

5
votes

En outre, si certaines de vos chaînes peuvent contenir plusieurs sous-chaînes parenthèses, toutes les utilisations que vous souhaitez extraire, utilisez le REGEX Power-Outils GREGEXPR () CODE> et REGMATCHES () CODE >:

x <- "This is (a) string (Yay, string!)" 
pat <- "(?<=\\()([^()]*)(?=\\))"
regmatches(x, gregexpr(pat, x, perl=TRUE))
# [[1]]
# [1] "a"            "Yay, string!"


4 commentaires

Et juste comme ça, je vois maintenant que ma réponse est un dupliqué exact de celui référencé il y a un instant par Tyler Rinker ci-dessus!


C'était la base du Backetx et Backetxtract fonction dans qdap . J'ai posé une question similaire et fournit encore plus de détails ici: Stackoverflow.com/questions/8621066/...


J'ai vu cette question, mais c'était beaucoup trop complexe pour ma compréhension limitée de la regex.


Vous voulez dire que vous ne parlez pas "(? <= \\ () ([^ ()] *) (? = \\))" ? ;-)