3

短い質問:

私は文字列を持っています:

title="Announcing Elasticsearch.js For Node.js And The Browser"

各単語が適切に大文字になっているすべての単語のペアを見つけたいです。

したがって、期待される出力は次のようになります。

['Announcing Elasticsearch.js', 'Elasticsearch.js For', 'For Node.js', 'Node.js And', 'And The', 'The Browser']

私が今持っているのはこれです:

'[A-Z][a-z]+[\s-][A-Z][a-z.]*'

これにより、出力が得られます。

['Announcing Elasticsearch.js', 'For Node.js', 'And The']

正規表現を変更して目的の出力を得るにはどうすればよいですか?

4

3 に答える 3

2

これを使用できます:

#!/usr/bin/python
import re

title="Announcing Elasticsearch.js For Node.js And The Browser TEst"
pattern = r'(?=((?<![A-Za-z.])[A-Z][a-z.]*[\s-][A-Z][a-z.]*))'

print re.findall(pattern, title)

「通常の」パターンは重複する部分文字列と一致することはできません。すべての文字は一度だけ作成されます。ただし、先読み(?=..)(つまり、「フォローされている」) は単なるチェックであり、何にも一致しません。文字列を数回解析できます。したがって、先読み内にキャプチャ グループを配置すると、重複する部分文字列を取得できます。

于 2013-12-17T21:02:13.410 に答える
0

現時点でのPythonコードがこれである場合

title="Announcing Elasticsearch.js For Node.js And The Browser"
results = re.findall("[A-Z][a-z]+[\s-][A-Z][a-z.]*", title)

次に、プログラムは奇数のペアをスキップしています。簡単な解決策は、次のように最初の単語をスキップした後にパターンを調査することです。

m = re.match("[A-Z][a-z]+[\s-]", title)
title_without_first_word = title[m.end():]
results2 = re.findall("[A-Z][a-z]+[\s-][A-Z][a-z.]*", title_without_first_word)

ここで、results と result2 を組み合わせるだけです。

于 2013-12-17T21:04:12.500 に答える