2016-06-16 2 views
-1

누군가가 내가 펄을 사용하여 파이썬으로 변환 한 것을 도와 줄 수 있는지 궁금하고, 대부분 그것을 좋아한다. 그러나 나는 파이썬에서 정규 표현식과 싸우기 때문에 이것은 어쨌든 perl만큼 강하거나 쉽지는 않다. 제외 값 목록 (exemptions_list)을 사용하여 for 루프에서 반복되는 다른 목록을 검색하려면 어떻게합니까? 문제는 for 루프의 값이 검색 면제와 약간 다릅니다.문자열을 사용한 Python 정규식 문제

즉 면제 중 하나는 "default"문자열이지만 검색 대상 변수는 default_10 또는 default_20입니다. 마찬가지로 검색 패턴도 없지만 공유는 none_20 등으로 불립니다. 검색 패턴을 반복하고 싶지는 않습니다. 이미 다른 하위 프로세스 출력에서 ​​나온 공유를 반복합니다. 따라서 기본적으로 문자열이 default가 아닌 default_20을 찾지 않습니다. shared_list에서 들어오는 변수를 어떻게 분해하여 python이 변수의 기본값을 사용하여 exemptions_list의 문자열을 다시 검색 할 수 있습니까? 공유 변수는 다른 시스템 서브 프로세스 출력에 대해 다르게 생성 된 것으로 설명됩니다.

많은 감사합니다.

Perl에서 쉽습니다.

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

파이썬 : 문자열에서

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 : 케빈이 의미하는 바는 당신의 코드가 유효한 파이썬이 아니라는 것입니다. 구문 오류가 있습니다. – 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

관련 문제