2016-08-03 6 views
-2

~^の間の文字列を1つ与える必要があります。
私はこのような文字列を持っている:私のpythonでそれらの間の文字列を取得する必要がありPython-get文字列を文字に変換

~~~~ ABC^DEF^HGK > LMN^ 

を。
私はこれ試してみた:

import re 
target = ' ~~~~ ABC^DEF^HGK > LMN^' 
matchObj = re.findall(r'~(.*?)\^', target) 
print matchObj 

をしかし、結果は次のとおりです。

['~~~ ABC '] 

私は何を期待することは次のとおりです。

[ABC , DEF , HGK , LMN ] 

または

[^ABC , ^DEF , ^HGK , LMN ] 
+0

を分割? '' ABC '''〜 '' ~~~ ABC^DEF^HGK> LMN "'? –

+1

あなたの質問を他の人に役立つ方法で編集してください。 – CentAu

+0

質問を書くときに尋ねる黄金の質問は、「答えは何と思いますか?ごくわずかな情報しか提供していません。 [mcve]の作成方法を学んでください –

答えて

0

これはスペースとアルファ文字を取得し、新しい文字列を作成し、リストここ

内の単語に分割し

>>> "".join([x for x in target if x.isalpha() or x == ' ']).split() 
['ABC', 'DEF', 'HGK', 'LMN'] 

のpython 3コマンドラインからの私の正確なコードがあります:

>>> target = ' ~~~~ ABC^DEF^HGK > LMN^' 
>>> xx = "".join([x for x in target if x.isalpha() or x == ' ']).split() 
>>> xx 
['ABC', 'DEF', 'HGK', 'LMN'] 
>>> 
+0

それは私にフルソース '['DOCTYPE'、 'html'、 'PUBLIC'、 'WCDTD'、 'XHTML'、 'TransitionalEN'、 'httpwwwworgTRxhtmlDTDxhtmltransitionaldtdDOCTYPE'、 'html' 'ABC^DEF^HGK> LMN ^'この部分は、この[ABC、DEF、HGK、LMN]のようにする必要があります。 – dragon

+0

ここで何をしているのか分かりません。 。とにかく、上記の私の答えでコードの3行を試してください –

+0

ああ、あなたの編集を参照してください。まずあなたが望むテキストをつかむために美しいスープを使いなさい。それは本当に別の質問です。一度あなたが 'target'を持っていれば、私のコードはあなたのために働くでしょう –

0

私は正確ではないw帽子の結果が望ましいですが、おそらくこれは?正規表現がなければ

>>> matchObj = re.findall(r'~+(.*?)\^', target) 
>>> print(matchObj) 
[' ABC '] 
+0

結果は '['ABC']'必要です '[' ABC '、' DEF '、' HGK '、' LMN ']' – dragon

+0

@ドラゴン私は自分の答えを編集しました。ここで質問します –

0

レイジー定量器を使用するというあなたの考えは良いですが、それでも一時的に可能な最短のマッチを与える - 正規表現エンジンの現在の位置からの最短マッチのみ。開始/終了区切り記号が一致の一部でないようにするには、有効な文字のリストから明示的に除外する必要があります。否定されたcharacter classがここに便利です。ここ

target = ' ~~~~ ABC^DEF^HGK > LMN^' 
matches = re.findall(r'~([^~^]*)\^', target) 
print matches 
+0

結果は '['ABC']' BUT i need ' '[DOCTYPE'、 'html'、 'PUBLIC'、 'WCDTD'、 'XHTML'、 'TransitionalEN'、['ABC'、 'DEF'、 'HGK'、 'LMN'] ' – dragon

0

は私のソリューションです:

ご入力:

In [12]: target = ' ~~~~ ABC^DEF^HGK > LMN^' 

あなたはどのような結果を期待していなかった' 'ですべてのシンボルまたは区切り文字を交換し、その結果に

In [13]: b = re.sub(r'[^\w]', ' ', target).split() 

In [14]: b 
Out[14]: ['ABC', 'DEF', 'HGK', 'LMN'] 
+0

'httpwwwworgTRxhtmlDTDxhtmltransitionaldtdDOCTYPE'、 'html'] 'など。....しかし、私は' ~~~~~ ABC^DEF^HGK> LMN^'この部分は[ABC、DEF、HGK、LMN]のようにしかなりません。 – dragon

+0

@ドラゴンは、あなたが '['DOCTYPE'、 'html'、 'PUBLIC'、 'WCDTD'、 'XHTML'、 'TransitionalEN'、 'httpwwwworgTRxhtmlDTDxhtmltransitionaldtdDOCTYPE'、 'html']'についてより具体的になります。私にあなたの入力を提供し、あなたの予想される出力は何ですか?私はあなたを助けることができるように –