2016-06-16 23 views
-1

誰かが私がPerlからPythonに変換してくれるのを助けてくれるのだろうかと思っています。しかし、私はPythonの正規表現と闘うが、これはとにかくperlほど強力ではない。 forループで反復されている別のリストを検索するには、除外値のリスト(exemptions_list)をどのように使用しますか。問題は、forループの値が検索の免除とわずかに異なることです。文字列を使ったPython正規表現の問題

免除の1つは「default」という文字列ですが、検索する変数はdefault_10またはdefault_20です。同様にnoneは検索パターンですが、共有はnone_20などと呼ばれます。他のサブプロセス出力から来た共有を繰り返しているので、検索パターンを繰り返し処理したくはありません。だから、基本的にデフォルトではなくdefault_20を探しているので、文字列は決して見つけられません。 shared_listから入ってくる変数を分解して、pythonが変数のデフォルトを使ってexemptions_listの文字列を再度検索する方法を教えてください。シェア変数は、異なるシステムのサブプロセス出力に対して異なる方法で生成される。

多くのありがとう

Perlで簡単です。

if ($share =~ /^.*_[\d\d]/ && $share !~ /$cust_id|$exemptions/) { 

のPython:文字列から

exemption_list = "none temp swap container" 
shares_list [' this is dynamic and comes in with values such as none_20 temp_20, testtmp etc ]' 
def process_share_information(shares_list, customer_id): 
    for share in shares_list: 
     share_match = re.search(share, exemption_list) 
     if not share_match: 
      print 'we have found a potentially bad share not in exemptions' 
+4

のためのつの結果が必要な場合は、すべての質問に[最小、生存、完全な例](https://stackoverflow.com/help/mcve)を教えてくださいスタックオーバーフロー。それが現れても、コードは実行されません。 –

+0

コードが実行されていた場合に非常に役立つかどうかわからないのはなぜですか?正規表現について少し助けを求めるだけのプライベートコードのページを投稿するつもりはありません。 – Stu

+0

@Stu:ケビンが意味することは、あなたのコードが有効なPythonではないということです。構文エラーがあります。 – SiHa

答えて

0

ストリップ最後_\d\d

だから、免除をチェックするために
re.sub(r'_\d\d$', '', string) 

行う

>>> re.sub(r'_\d\d$', '', "none_20") in exemption_list 
True 

検索した単語がname_\d\dよりも一般的な形式の場合は、代わりに除外を繰り返します。

>>> exemptions = "none temp swap container".split() 
>>> shares_list = "this is dynamic and comes in with values such as none_20 asdfnone anonea temp_20, testtmp etc" 
>>> for e in exemptions: 
...  print(e) 
...  print(e in shares_list) 
...  print(re.findall(r'\b\S*?{}\S*?\b'.format(e), shares_list)) 
...  print() 
... 
none 
True 
['none_20', 'asdfnone', 'anonea'] 

temp 
True 
['temp_20'] 

swap 
False 
[] 

container 
False 
[] 

それともあなただけの文字列全体

>>> any(e in shares_list for e in exemptions) 
True 
+0

おかげで私はこれを考えましたが、残念ながらそれはフォーマットのすべてが _ddであった場合、他の免除と適合しませんでした。しかし、いくつかの機会に共有価値はwwwwdddd_default_dddwwwdddなどになるでしょう。 – Stu

+0

多分私はそれを逆にするべきです。もしshareのexception_listを私が免除の完全なリストとしてやってもいいですか、それとも免除もループする必要がありますか? – Stu

+0

@Stuそれはあなたの* perl *の例であったので、 'name_ \ d \ d'形式であると考えました。質問がもっとはっきりするように編集してください。 – pacholik