2017-11-23 3 views
0
fix_release='Ubuntu 16.04 LTS' 

p = re.compile(r'(Ubuntu)\b(\d+[.]\d+)\b') 
fix_release = p.search(fix_release) 
logger.info(fix_release) #fix_release is None 

Ich mag die Zeichenfolge ‚Ubuntu 16.04‘Extrakt String mit regulärem Ausdruck

Aber Ergebnis ist keine extrahieren .... Wie kann ich den richtigen Satz zu extrahieren?

+0

Zuerst korrigieren Sie Ihre Testzeichenfolge. Du hast "Ubutu" statt "Ubuntu" geschrieben. Zweitens können Sie diese Regex versuchen: ['Ubuntu \ s * \ d + (?: \. \ D +)?'] (Https://regex101.com/r/iGzyET/1) – Gurman

Antwort

1

Sie die Wortgrenze \b mit weißen Raum verwirrt, entspricht die erstere die Grenze zwischen einem Wortzeichen und einem Nichtwortzeichen und verbraucht Null Charakter, Sie einfach r'Ubuntu \d+\.\d+' für Ihren Fall verwenden können:

fix_release='Ubuntu 16.04 LTS' 
p = re.compile(r'Ubuntu \d+\.\d+') 
p.search(fix_release).group(0) 
# 'Ubuntu 16.04' 
1

Try diese Regex:

Ubuntu\s*\d+(?:\.\d+)?

Click for Demo

Erläuterung:

  • Ubuntu - passend Ubuntu buchstäblich
  • \s* - Streichhölzer 0+ Vorkommen eines weiß-Raum, so viele wie möglich
  • \d+ - 1+ Ziffern Streichhölzer, so viele wie möglich
  • (?:\.\d+)? - entspricht einer . gefolgt von 1 + Ziffern, so viele wie möglich. Ein ? am Ende macht dieses Teil optional.

Hinweis: In Ihrer Regex verwenden Sie \b für die Leerzeichen. \b gibt 0 Übereinstimmungen zwischen einem Wortzeichen und einem Nichtwortzeichen zurück. Sie können stattdessen \s verwenden

Verwandte Themen