特定のテキスト内のテキストを取得するにはどうすればよいですか? たとえば、次のようなテキストがあるとします。
'lololol \r asdfasdf r\ gfhfgr'
「asdfasdf」を返すにはどうすればよいですか。基本的に、ビット'\r'
と'r\'
?の間のテキストを取得します。
別の解決策、
import re
s = r'lololol \r asdfasdf r\ gfhfgr'
pattern = re.compile('\\\\r (.*?) r\\\\')
print pattern.findall(s)
結果は['asdfasdf']
編集:
まあ、おい、それはあなたがあなたの例で望んでいたとあなたが言ったことです。ご希望の場合は、ご利用いただけます
pattern = re.compile('\\\\r(.*?)r\\\\')
代わりにあなたに与えます[' asdfasdf ']
。
Pythonと文字列の再解析の方法のために、「すべてのスラッシュ」が必要です。スラッシュは、\n
(改行文字)のような有向グラフのエスケープ文字として使用されます。したがって、スラッシュを示すには、\\
有向グラフを使用する必要があります。これを見てみprint('\\')
てください。
次に、それを2倍にする必要があります。これは、文字列をそれ自体の有向グラフのセット(数字の場合は\ d、空白の場合は\ sなど)に対して再度解析するためです。したがって、と入力する'\\\\'
と、Pythonはこれを2つのスラッシュで構成される文字列であると理解します。これはreに渡され、reに渡されて解析され、単一の文字\\
を探していると見なされます。\
これを行わなくても逃げることができる場合があります。のような文字列が'\m'
あり、末尾の文字が有効な有向グラフにならない場合、結果は実際には2文字の文字列になります\m
(try print('\m')
)。\rはちょっとファンキーです。Pythonはこれをキャリッジリターンの有向グラフとして認識しますが、reは\ rを有向グラフとして使用しないため、Pythonに「\r」または「\\r」を指定すると、リテラル文字列「\r」が再検索されます。私はダブルダブルスラッシュを好みます。これは、合法的な有向グラフであるかどうかの2つの別々の定義を覚えておく必要がないことを意味します。一方、Pythonとreはどちらも\'を一重引用符の有向グラフ(文字print('\'')
を印刷'
)として認識します。したがって、両方のスラッシュを完全にダブルエスケープする必要があります。そうしないと、「ねえ、残りの文字列はどこにありますか? ?」エラー ('
もう1つの方法は、生の文字列を入力することです(r'abc'
); これは、Pythonに文字列内の有向グラフを解析しないように指示しますが、reは引き続き解析するため、パターンは次のようになります。
pattern = re.compile(r'\\r(.*?)r\\')
Python では正規表現を使用できます。
>>> import re
>>> s = 'lololol \r asdfasdf r\ gfhfgr'
>>> e = re.search(r'\r (?P<boxflux>.*) r\\', s)
>>> e.group('boxflux')
'asdfasdf'
boxflux.com