2017-05-29 7 views
0

Mon but est d'obtenir un nettoyage de chaîne compatible avec unicode multiligne en utilisant regex.Expression rationnelle multiligne pour faire correspondre la chaîne après les données séparées par des espaces

J'ai commencé à partir de ce regex, qui n'a pas de limites de: arrières,

(?<=[[:blank:]]).* 

Puis, je l'ai trouvé moyen de limiter lookbehind comme suit:

(?!.{20,})(?<=[[:blank:]]).* 

Il fonctionne sur certains cas , mais pas vraiment stable (link) car la longueur de la chaîne n'est pas prévisible.

Aussi la virgule de queue n'est pas souhaitable, mais je n'ai pas compris comment elle pourrait être supprimée avec regex, parce qu'en raison de sa manière imprévisible (voir testcase).

Comment créer un lookbehind bien limité pour cette tâche? J'utilise boost (pcre) -style regex.

cas de test:

Dans

РПÑАВÂРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ, 11.22 Ø.Á. 
ÛÑРВЛÛÑВ ÛÑßВßДÛÑВßЛ РИÐРÛПÑÑВÛ 11.22 Ã.Ö 
ВßÑÛВÂЛÛÑВ ÛÑВÂÛÑВЛß ßРßÂРÑВЛРÛÐßРВ, 11.22 Â.Ö. 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ, 11.22 Ã.Ö. 
РÐÑАВПРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ, 11.22 Ø.р. 
ÛÑРВÂÛÑВ ÛÑßВßДÛÑВß РÂПРÛПÑÑВÛ 11.22 Ø.Á. 
ВßÑÛВДЛÛÑВ ÛÑВЛÛÑВЛß ßРßЛРÑВЛРÛЛßРВ 11.22 Ø.Ö. 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ, 11.22 Ï.Á. 

Out

РПÑАВÂРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ 
ÛÑРВЛÛÑВ ÛÑßВßДÛÑВßЛ РИÐРÛПÑÑВÛ 
ВßÑÛВÂЛÛÑВ ÛÑВÂÛÑВЛß ßРßÂРÑВЛРÛÐßРВ 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ 
РÐÑАВПРßÛÑ ÛÑРВßР ÛÑÛÑАÑÛ 
ÛÑРВÂÛÑВ ÛÑßВßДÛÑВß РÂПРÛПÑÑВÛ 
ВßÑÛВДЛÛÑВ ÛÑВЛÛÑВЛß ßРßЛРÑВЛРÛЛßРВ 
ÛÑВÛÑВ ÛßÛßРÑВßРÐ ßТАÛ 

Répondre

1

Vous pouvez également correspondre à ces parties non désirées:

\s*[,\d].* 

les remplaçons alors rien (ou les supprimer) dans votre environnement.

Live demo

0

Sur la base de la sortie de l'échantillon, je suppose que vous devez extraire toute séquence d'Unicode, mais pas les lettres latines (\p{L}) ou des espaces (\s) s'étendant du début de la ligne jusqu'au premier caractère qui n'est pas dans cette classe:

^[\p{L}\s]+ 

Démo: https://regex101.com/r/4rFuCC/1

+0

Désolé, mais NPP ne pouvait rien correspondre à ce regex et test donné –

+0

Oh, Notepadd ++ fait la différence. Il supporte PCRE mais de manière limitée. En particulier, il ne supporte pas les catégories Unicode, y compris 'L' - voir les commentaires sur' \ Nom de Pshort, \ P {name} '[ici] (http://docs.notepad-plus-plus.org/index.php/ Expressions régulières). Avec NPP, vous pouvez utiliser '\ w' pour faire correspondre les alphanumériques, y compris les caractères Unicode. Donc l'expression rationnelle peut être réécrite comme '^ (?: (?! \ D) [\ w \ s]) +'. –

+0

désolé, mais cette regex ne fonctionne pas non plus. En raison de '^' il essaie de correspondre depuis le début. –