2017-04-04 7 views
1

文字列を最後まで一致させようとしていますが、別の文字列が空白で区切られている場合は、最初の文字列であり、この余分なパターンではありません。この余分なパタパタは常にで始まる:文字列と一致しますが、特定のパターンと一致しない場合はPython

(from 

ここでは文字列のセットの例です:あなたが見ることができるように、最初のパスが後

M /trunk 
M /trunk/src/chip/GCC/ARMCMx/STM32F4xx/vectors.c 
A /trunk/src/hal/include/spdif.h (from /branches/spdif_446/src/hal/include/spdif.h:1078) 
M /trunk/src/hal/platforms/STM32/SAI/sai_lld.h 
A /trunk/src/hal/platforms/STM32/SPDIF (from /branches/spdif_446/src/hal/platforms/STM32/SPDIF:1078) 
A /trunk/src/hal/src/spdif.c (from /branches/spdif_446/src/hal/src/spdif.c:1078) 

ので、それらの行の数は余分な文字列を持っています表示されます。コードがコミットしたブランチを表示しています。私は、文字列の最初の部分だけを、パスの終わりまでしか必要としません。私はそれがどこから来たのかを示すセクションを望んでいません。これをどうやってやりますか?

私はこれが働くだろうと思った:

(.+)[\s] 
しかし、それは全体のラインと一致し、私は理由を知りません。ご協力いただきありがとうございます。

+0

どのように(^シンプル '(M?)について:?(\ sの* \())+' – sln

+0

?!。 @sln:先読みはあまりにも高価で*ここでは必要ありません。[** yours **](https://regex101.com/r/cBAOPA/2/)と[** mine **](https ://regex101.com/r/cBAOPA/1/)、同じ結果に達するには10倍以上のステップが必要です。 – Jan

+0

@Jan - そうです! – sln

答えて

0

それはそう、あなたは

^[A-Z]+\s+(\S+) 

を使用して...と、最初のグループを取り、a demo on regex101.comを見ることができました。 Python


これは次のようになります。

import re 

string = """ 
M /trunk 
M /trunk/src/chip/GCC/ARMCMx/STM32F4xx/vectors.c 
A /trunk/src/hal/include/spdif.h (from /branches/spdif_446/src/hal/include/spdif.h:1078) 
M /trunk/src/hal/platforms/STM32/SAI/sai_lld.h 
A /trunk/src/hal/platforms/STM32/SPDIF (from /branches/spdif_446/src/hal/platforms/STM32/SPDIF:1078) 
A /trunk/src/hal/src/spdif.c (from /branches/spdif_446/src/hal/src/spdif.c:1078) 
""" 

rx = re.compile(r'^[A-Z]+\s+(\S+)', re.MULTILINE) 
files = rx.findall(string) 
print(files) 

# ['/trunk', '/trunk/src/chip/GCC/ARMCMx/STM32F4xx/vectors.c', 
# '/trunk/src/hal/include/spdif.h', '/trunk/src/hal/platforms/STM32/SAI/sai_lld.h', 
# '/trunk/src/hal/platforms/STM32/SPDIF', '/trunk/src/hal/src/spdif.c'] 


最後に、おそらくより多くの終わりまでに少なくとも一度あなたの最初の質問、(改行を除く .、)任意の文字に一致 (.+)[\s]パターンに答えるが、これらにこの線。これに続いて、空白( \s)を含む(この場合は不要な)文字クラス( [...])が続きます。最終的には、改行を含むすべての行と一致します。これは、正規表現をまったく使用しないのと同じです。あなただけの可能 (前に一致させたい場合は

0

それはだ

(?m)^[^(\r\n]+

関連する問題