J'ai cette chaîne:

151228- ▶ Guido's Lounge Cafe Broadcast 0124 It Will Be Alright (20140718) par Guido's Lounge Café

Je veux supprimer les nombres - "0124" et "20140718" à l'intérieur de la chaîne, mais laissez le nombre "151228" au début intact par regex. J'ai essayé tant de fois, mais je n'ai toujours pas trouvé de moyen de le faire en utilisant une seule expression. Le mieux que je puisse faire était ceci:

151228- ▶ Guido's Lounge Cafe Broadcast It Will Be Alright) par Guido's Lounge Café

Par l'expression: [^ \ d +] \ d +

C'est presque un succès, mais la parenthèse ouverte de «20140718» est également supprimée.

Ici (lien: page Unity) vous pouvez trouver un didacticiel vidéo comment utiliser Button sur le canevas dans UnityGUI. C'est pour Unity 4.6 mais c'est vraiment similaire au plus récent (5.3.1).

J'utilise php, et fais un peu de remplacement par preg_replace (regex, "", "$ str"). cette chaîne affichée ici est choisie au hasard. il n'y aura donc pas de contraintes particulières. en fait, je veux juste supprimer les nombres à l'intérieur de la chaîne pour tester ma compréhension regex. alors j'ai échoué ...

0
Jerry Zhang 28 déc. 2015 à 08:46

3 réponses

Meilleure réponse

Il semble que vous souhaitiez toujours que le premier chiffre (à gauche du "- ▶") reste et que tous les autres chiffres soient supprimés. En supposant le langage Python, vous devriez pouvoir utiliser une anticipation négative comme suit:

print re.sub(r'\d+(?!.*-▶)', '', "151228-▶ Guido's Lounge Cafe Broadcast 0124 It Will Be Alright (20140718) by Guido's Lounge Café")

# output
# 151228-▶ Guido's Lounge Cafe Broadcast  It Will Be Alright () by Guido's Lounge Café

Comment ça marche: Il remplace tout groupe de nombres par une chaîne vide à l'exception du premier groupe. Le premier groupe est défini comme étant à gauche de la séquence de caractères -▶.

MODIFIER (en PHP):

$output = preg_replace("/\d+(?!.*-)/", "", "151228- Guido's Lounge Cafe Broadcast 0124 It Will Be Alright (20140718) by Guido's Lounge Caf");

Qui renvoie:

151228- Guido's Lounge Cafe Broadcast  It Will Be Alright () by Guido's Lounge Caf
0
Martin Konecny 28 déc. 2015 à 07:57

S'il contient toujours le mot Broadcast et Alright, vous pouvez simplement le spécifier:

toDelete = re.findall('Broadcast ([0-9]+)', line)
toDelete2 = re.findall('Alright ([(0-9)]+)', line)

Cela devrait extraire ces nombres, avec les données spécifiques, vous pouvez alors créer une fonction pour supprimer tout ce qui se trouve dans toDelete de la ligne. (par «ligne», je veux dire la ligne où se trouve la chaîne dont vous voulez supprimer des éléments) Je l'écrirais mais je ne sais pas quelle langue vous utilisez.

1
Bizarre 28 déc. 2015 à 06:11

C'est vraiment mieux fait avec plusieurs expressions régulières, mais en voici une seule:

s/(\d+)([^0-9]+)\s+\d+([^(]+)[(]\d+[)]\s+(.+)$/$1$2$3$4/;

Et la sortie est:

151228-▶ Guido's Lounge Cafe Broadcast It Will Be Alright by Guido's Lounge Café
0
Craig Estey 28 déc. 2015 à 06:35