web-dev-qa-db-de.com

Wörter nach Stichwort in Python finden

Ich möchte nach Wörtern suchen, die nach einem Stichwort (von mir angegeben und gesucht) erscheinen und das Ergebnis ausdrucken. Ich weiß, dass ich Regex dazu verwenden möchte, und ich habe es auch so ausprobiert:

import re
s = "hi my name is ryan, and i am new to python and would like to learn more"
m = re.search("^name: (\w+)", s)
print m.groups()

Die Ausgabe ist nur:

"is"

Aber ich möchte alle Wörter und Satzzeichen erhalten, die hinter dem Wort "Name" stehen.

17
Ryan

Anstelle von regulären Ausdrücken können Sie (beispielsweise) Ihre Zeichenfolge mit str.partition(separator) wie folgt trennen:

mystring =  "hi my name is ryan, and i am new to python and would like to learn more"
keyword = 'name'
befor_keyowrd, keyword, after_keyword = mystring.partition(keyword)
# before_keyword = 'hi my '
# keyword = name
# after_keyword = ' is ryan, and i am new to python and would like to learn more'

Sie müssen jedoch mit den unnötigen Leerzeichen getrennt umgehen.

26
Aufwind

Ihr Beispiel wird nicht funktionieren, aber wenn ich die Idee verstehe:

regexp = re.compile("name(.*)$")
print regexp.search(s).group(1)
# prints " is ryan, and i am new to python and would like to learn more"

Dies wird alles nach "Name" und bis zum Ende der Zeile drucken.

8
DominiCane

Eine andere Alternative ...

   import re
   m = re.search('(?<=name)(.*)', s)
   print m.groups()
3
fransua

Anstelle von "^name: (\w+)" verwenden Sie:

"^name:(.*)"
3
Petar Ivanov

Was Sie in Bezug auf Ihre Ausgabe verwendet haben:

re.search("name (\w+)", s)

Was müssen Sie verwenden ( match all ):

re.search("name (.*)", s)
2
Tugrul Ates

Du könntest es einfach tun

s = "hi my name is ryan, and i am new to python and would like to learn more"
s.split('name')

Dies wird Ihre Zeichenfolge teilen und eine Liste wie diese zurückgeben.

je nachdem, was Sie tun möchten, kann dies helfen oder nicht.

1
Hassek
import re
s = "hi my name is ryan, and i am new to python and would like to learn more"
m = re.search("^name: (\w+)", s)

print m.group(1)
1
krish

Dies wird für u funktionieren: Arbeitsname\s\w +\s (\ w +)

>>> s = 'hi my name is ryan, and i am new to python and would like to learn more'
>>> m = re.search('name\s\w+\s(\w+)',s)
>>> m.group(0)
'name is ryan'
>>>> m.group(1)
'ryan'
1
Poovaraghan

Ohne Regex verwenden zu können 

  • strich-Interpunktion (alle Einzelfälle einschließlich Suchbegriff berücksichtigen)

  • teilen Sie Ihren Text in einzelne Wörter auf

  • finden Sie den Index des gesuchten Wortes

  • holen Sie sich Word aus dem Array (index + 1 für Word nach, index - 1 für Word vor)

Code-Auszug:

import string
s = 'hi my name is ryan, and i am new to python and would like to learn more'
t = 'name'
i = s.translate(string.maketrans("",""), string.punctuation).split().index(t)
print s.split()[i+1]

>> is

Für mehrere Vorkommen müssen Sie mehrere Indizes speichern:

import string
s = 'hi my NAME is ryan, and i am new to NAME python and would like to learn more'
t = 'NAME'
il = [i for i, x in enumerate(s.translate(string.maketrans("",""), string.punctuation).split()) if x == t]
print [s.split()[x+1] for x in il]

>> ['is', 'python']
0
philshem