3

2 日前に Python の学習を始めたばかりです。明らかな間違いがあった場合は申し訳ありません

strings: "brake  break  at * time" --> ["at","time"]
"strang  strange  I felt very *" --> ["very",""]

前後の単語を取得しようとしています *

私の試み:

re.match(r"(?P(first_word)\w+) ('_*_') (?P(first_word)\w+)",strings).group('first_word')

最初の言葉を得るために

re.match(r"(?P(first_word)\w+) ('_*_') (?P(first_word)\w+)",strings).group('last_word')

最後の言葉を得るために

エラー: 何も繰り返さない

4

3 に答える 3

2

を使用するだけstring.split('*')です。

このように(1 *のみで機能します):

>>> s = "brake  break  at * time"
>>> def my_func(s):
     parts = s.split('*')
     a = parts[0].split()[-1]
     b = parts[1].split()[0] if parts[1].split() else ''
     return a,b
>>> my_func(s)
('at', ' time')

または、正規表現が必要な場合:

>>> s = "brake  break  at * time 123 * blah"
>>> regex = re.compile("(\w+)\s+\*\s*(\w*)")
# Run findall
>>> regex.findall(s)
[(u'at', u'time'), (u'123', u'blah')]
于 2013-04-03T09:31:21.820 に答える
2
import re
text1 = "brake  break  at * time"
text2 = "strang  strange  I felt very *"
compiled = re.compile(r'''
(\w+)  # one or more characters from [_0-9a-zA-Z] saved in group 1
\s+  # one or more spaces
\*  # literal *
\s*  # zero or more spaces
(\w*)  # zero or more characters from [_0-9a-zA-Z] saved in group 2
''',re.VERBOSE)

def parse(text):
    result = compiled.search(text)
    return [result.group(1), result.group(2)]

print(parse(text1))
print(parse(text2))

出力:

['at', 'time']
['very', '']
于 2013-04-03T09:36:02.853 に答える
1

試す:

[x.strip() for x in "test1 * test2".split('*', 1)]

.strip()空白を取り除き.split('*', 1)、文字列をアスタリスクで 1 回分割します。

たった1つの単語が必要な場合:

words = [x.strip() for x in "test1 * test2".split('*', 1)]
first = words[0].rsplit(' ', 1)[1]
last = words[1].split(' ', 1)[0]
于 2013-04-03T09:27:21.283 に答える