Question

Étant donné le type de chaîne suivant:

"#First Thing # #Another One ## Pas d'espace # chaîne principale #after Main # # endstring #"

Je voudrais trouver une expression régulière qui peut renvoyer tout le texte entouré des symboles # en correspondance. L'une des choses qui me donne du chagrin est le fait que le symbole # est à la fois le délimiteur d'ouverture et de clôture. Toutes mes tentatives de regex viennent de retourner toute la chaîne. L'autre problème est qu'il est possible qu'une partie de la chaîne ne soit pas entourée de symboles #, comme le montre la sous-chaîne "chaîne principale" ci-dessus. Quelqu'un a-t-il une idée? J'ai joué un peu avec une affirmation de vue négative, mais je n'ai pas pu le faire fonctionner. Il peut y avoir ou non un espace entre les groupes de #, mais je veux les ignorer (ne pas correspondre à eux) s'il y en a. L'autre option serait d'écrire simplement une routine d'analyse de chaîne, ce qui serait assez facile, mais je préférerais utiliser un regex si possible.

Était-ce utile?

La solution

Éditer

Je pense que c'est ce dont vous avez besoin:

(?<=#)[^#]+?(?=#)

Avec entrée #First Thing# #Another One##No Space# Main String #After Main# allumettes:

  • First Thing
  • Another One
  • No Space
  • Main String
  • After Main

Le deuxième match est l'espace entre Thing# et #Another.

Modifier] pour ignorer l'espace:

(?<=)(?!\s+)[^#]+?(?=#)

Si vous voulez ignorer les espaces de fuite:

(?<=)(?!\s+)[^#]+?(?=\s*#)

Autres conseils

/((#[^#]+#)|([^#]+))/

Peut-être que quelque chose comme ce qui précède correspondra à ce que vous voulez.

Cela correspondra à l'espace entre deux hachages. Hmm.

/((#[^#]+#)|([^#]*[^#\s]+[^#]*))/

Cela se débarrassera de l'espace désagréable, je pense.

Essaye ça. Les premier et derniers groupes ne doivent pas être capturés et le. *? devrait être paresseux

(?:#)(.*?)(?:#)

Je pense que c'est ce dont vous avez vraiment besoin:

((#[^#]+#)|([^#]*[^#\s]+[^#]*))

mais il ne capturera pas le #C'est autour Main String

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top