2016-05-18 7 views
1

を維持これは文字列の分割が今の私のためにどのように動作するかです:とパターン

output = string.encode('UTF8').split('}/n}')[0] 
output += '}\n}' 

しかし、それを行うにはより多くの神託の方法がある場合、私は疑問に思って。 '}/N}' を含む

の目標は、この'}/N}' の前にすべてを取得することであるre.split()として

+3

あなたの質問はかなり不明です。あなたの入力と予想される出力は何ですか? –

+0

@ OrangeFlash81: '}/n}'の前にすべてを取得しようとしていますが、上記のようにより良い方法を見つけることができませんでした。 – Empario

+0

ご清聴ありがとうございます!私はそれをするためのよりよい方法を知らないが、それもあるかもしれない。 –

答えて

0

を行うことができます - キーはあなたが上の分割どのような維持するために、分割パターンの周りに括弧を入れている:

import re 

output = "".join(re.split(r'(}/n})', string.encode('UTF8'))[:2]) 

しかし、私は、これはどちらかで、最も効率的でも最もPython的疑いますあなたが望むものを達成する方法。私。私はこれが当然分割種類の問題だとは思わない。たとえば:

tag = '}/n}' 

encoded = string.encode('UTF8') 

output = encoded[:encoded.index(tag)] + tag 

をしたり、ワンライナーを主張する場合:

output = (lambda string, tag: string[:string.index(tag)] + tag)(string.encode('UTF8'), '}/n}') 

または正規表現に戻る:

output = re.match(r".*}/n}", string.encode('UTF8')).group(0) 
-1

Slice a string after a certain phrase?から適応、あなたが見つけると、スライスに組み合わせることができます文字列の最初の部分を取得し、}/n}を保持します。

str = "012za}/n}ddfsdfk" 
str[:str.find("}/n}")+4] 

str.partitionの良い使用であるかもしれない012za}/n}

+0

ですか?下の投票の説明がうまくいくでしょう。 – scrappedcola

+0

私はそうではありませんでしたが、明らかなタイプミスがあります。それは 'str [str:str.find ...]'の代わりに 'str [:str.find ...]'でなければなりません。また、 'str.find'は、マッチが見つからないとき、-1 + 4 = 3のように振る舞います。 –

+0

yup私はコンソールからカットアンドペーストできず、私が2Yを入力したことを知らなかった。 – scrappedcola

1

これになります。

string = '012za}/n}ddfsdfk' 

parts = string.partition('}/n}') 
# ('012za', '}/n}', 'ddfsdfk') 

''.join(parts[:-1]) 
# 012za}/n} 

または、str.indexで明示的に検出できます。

repl = '}/n}' 

string[:string.index(repl) + len(repl)] 
# 012za}/n} 

部分文字列が見つからない場合は例外ではなく無意味な結果を生成するよりも、発生しますので、これはおそらく、str.findを使用するよりも優れています。

「よりエレガント」には正規表現が必要なようです。

import re 
re.search('(.*?}/n})', string).group(0) 
# 012za}/n} 
0
>>> string_to_split = 'first item{\n{second item' 
>>> sep = '{\n{' 
>>> output = [item + sep for item in string_to_split.split(sep)] 
NOTE: output = ['first item{\n{', 'second item{\n{'] 

、あなたが結果を使用することができます。

for item_with_delimiter in output: 
    ... 

あなたが行末がどうなるかわからない場合os.linesepをルックアップするために役に立つかもしれません。 os.linesepは現在のOSの行末が何であれ、Windowsの場合は'\r\n'、LinuxまたはMacの場合は'\n'です。これは、入力データがどこから来たのか、コードが環境全体でどの程度柔軟である必要があるのか​​によって異なります。

関連する問題