string = "The is a better :: sentence as :: compared to that" 

Wynik:

  1. lepsze wyrok
  2. jak porównano

Próbowałem następujących

string.split(" :: "), 
re.sub("[\<].*?[\>]", "", string)

Nie dadzą mi konkretnych słów

0
Shounak Gujarathi 28 czerwiec 2017, 00:28

3 odpowiedzi

Najlepsza odpowiedź
>>> string = "The is a better :: sentence as :: compared to that" 
>>> x = [' '.join(x) for x in map(lambda x: (x[0].split()[-1], x[1].split()[0]), zip(string.split('::')[:-1], string.split('::')[1:]))]
>>> x

Wynik:

['better sentence', 'as compared']

Dekoncja:

Po pierwsze, Split na podstawie kolejnych meczów Grupy Zip i Grupa ZIP

pairs = zip(string.split('::')[:-1], string.split('::')[1:]))

Jeśli list() to wyrażenie, otrzymasz:

[('The is a better ', ' sentence as '), (' sentence as ', ' compared to that')]

Następnie zastosuj funkcję, aby wyodrębnić ostatnie słowo z pierwszego elementu i pierwszego słowa z drugiego elementu każdej krotki:

new_pairs = map(lambda x: (x[0].split()[-1], x[1].split()[0]), pairs)

Jeśli list() to wyrażenie, otrzymasz:

[('better', 'sentence'), ('as', 'compared')]

Wreszcie dołącz do każdej krotki w rozumieniu listy:

result = [' '.join(x) for x in new_pairs]

Wynik:

['better sentence', 'as compared']

timeit Wyniki:

The slowest run took 4.92 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 5.74 µs per loop

Oto kolejny sposób z re.

import re
string = "The is a better :: sentence as :: compared to that" 
result = [' '.join(x) for x in re.findall('([\w]+) :: ([\w]+)', string)]

Wynik:

['better sentence', 'as compared']

timeit Wyniki:

The slowest run took 4.60 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 4.49 µs per loop
3
cs95 27 czerwiec 2017, 21:47

Oto inny sposób:

1) Zdobądź wskaźniki ogranicznika

indices = [idx for idx, elem in enumerate(string.split(' ')) if elem == '::']

2) Dołącz do słów wokół separatora

for idx in indices:
    print ' '.join(string.split(' ')[idx-1:idx+2:2])

'better sentence'
'as compared'
1
gold_cy 27 czerwiec 2017, 21:42

Rozwiązanie przy użyciu funkcji re.findall():

s = "The is a better :: sentence as :: compared to that"
result = [' '.join(i) for i in re.findall(r'(\w+) ?:: ?(\w+)', s)]

print(result)

Wyjście:

['better sentence', 'as compared']
3
RomanPerekhrest 27 czerwiec 2017, 21:43