Je suis coincé sur un problème de RegEx qui est apparemment très simple et pourtant je n'arrive pas à le faire fonctionner.Regex pour capturer un groupe optionnel au milieu d'un bloc d'entrée
Supposons que j'ai entrée comme ceci:
Some text %interestingbit% lots of random text lots and lots more %anotherinterestingbit%
Some text %interestingbit% lots of random text OPTIONAL_THING lots and lots more %anotherinterestingbit%
Some text %interestingbit% lots of random text lots and lots more %anotherinterestingbit%
Il y a beaucoup de blocs répétitifs dans l'entrée et dans chaque bloc, je veux saisir certaines choses qui sont toujours là (% interestingbit% et% anotherinterestingbit%), mais il y a aussi un peu de texte qui peut ou ne peut pas se produire entre-eux (OPTIONAL_THING) et je veux le capturer s'il est là.
Un RegEx comme celui-ci correspond uniquement à des blocs avec OPTIONAL_THING dans (et les travaux de capture nommés):
%interestingbit%.+?((?<OptionalCapture>OPTIONAL_THING)).+?%anotherinterestingbit%
Il semble donc que c'est juste une question de faire l'ensemble du groupe en option, non? Voilà ce que j'ai essayé:
%interestingbit%.+?((?<OptionalCapture>OPTIONAL_THING))?.+?%anotherinterestingbit%
Mais je trouve que même si cela correspond à tous les 3 blocs de la capture du nom (de OptionalCapture) est vide dans tous! Comment puis-je faire fonctionner ça?
Notez qu'il peut y avoir beaucoup de texte dans chaque bloc, y compris les retours à la ligne, c'est pourquoi j'ai mis ". +?" plutôt que quelque chose de plus spécifique. J'utilise des expressions régulières .NET, testant avec The Regulator.
Ta-ta-da-da! Ça marche! Merci beaucoup. – EMP