2017-06-09 3 views
-1

Ich habe einen regulären Ausdruck, den ich über eine große Anzahl von Suchbegriffen, die ich nicht kontrolliere. Gibt es eine Möglichkeit, Sonderzeichen zu erkennen und sie als Teil der Suche und nicht als reguläre Ausdrücke zu behandeln?Regulärer Ausdruck Suchzeichenfolge mit Klammern als Teil der Zeichenfolge in Python zu erkennen

bearbeiten Ich klärte die Frage

searchTerms = ['ThisIsMySearchString(LSB)', 'OtherSearchTerm'] 
list = ['ThisIsMySearchString(LSB)OtherStuffInString', 'OtherStringsToSearch'] 

for item in searchTerms: 
    if (re.search(item, list, re.I)): 
     print('found item') 
+1

Es ist in den ersten Zeilen der Dokumentation von 're'. – mkiever

+0

Was hindert Sie daran, Backslashes in den Suchbegriff einzufügen? – mkiever

+0

@mkiever Ich habe den Beitrag bearbeitet, um mehr zu reflektieren, wonach ich suche. Ich bin nicht auf der Suche nach einer fest codierten Saite, also muss ich es irgendwie verallgemeinern. – ProfessionalNameForDisplayHere

Antwort

1

Verwenden re.escape auf Ihrem Muster und dann normalerweise re.search verwenden. Dies setzt voraus, dass Sie nur literale Muster haben und nie eine besondere Bedeutung in den Mustern haben wollen.

searchTerms = ['ThisIsMySearchString(LSB)', 'OtherSearchTerm'] 
list = ['ThisIsMySearchString(LSB)OtherStuffInString', 'OtherStringsToSearch'] 

for item in searchTerms: 
    for targetText in list: 
     if (re.search(re.escape(item), targetText, re.I)): 
      print('found item', item, 'in', targetText) 
+0

Das ist es. Danke, dass Sie mir geholfen haben zu erklären, wonach ich gesucht habe. – ProfessionalNameForDisplayHere

1

einfach die Klammer mit einem \ entkommen.

if (re.search('ThisIsMySearchString\(LSB\)', list, re.I)): 
+0

Ich habe die Frage bearbeitet, um zu reflektieren, was ich in meinem Code genauer mache. Die Suchzeichenfolge ist nicht fest codiert, daher muss ich erkennen, dass es Klammern gibt, und sie entsprechend kennzeichnen. – ProfessionalNameForDisplayHere

2

Sie können die ( in Ihrem regex entkommen, um sie nicht als Sonderzeichen zu machen behandeln, sondern zu einem passen. so:

re.search('ThisIsMySearchString(LSB)', list, re.I) 

wird

re.search('ThisIsMySearchString\(LSB\)', list, re.I) 

Im Allgemeinen Sie \ verwenden den besonderen Charakter, wie . zu entkommen, die \. wird, wenn Sie auf sie suchen möchten.

aktualisieren

OK, jetzt mit neuen Informationen, würde ich versuchen, Python leistungsstarke Batterien Funktionen zu benutzen, um Ihre Bedingungen zu finden. Etwas wie:

searchTerms = ['ThisIsMySearchString(LSB)', 'OtherSearchTerm'] 
list = ['ThisIsMySearchString(LSB)OtherStuffInString', 'OtherStringsToSearch'] 

for term in searchTerms: 
    for item in list: 
     if term in item: 
      print(f'Found {term} in the list!') 

, die für mich gibt:

Found ThisIsMySearchString(LSB) in the list! 
+0

Gibt es einen Leistungsvorteil gegenüber der Verwendung von re.escape()? – ProfessionalNameForDisplayHere

+0

Ja. Wenn Sie mit einem sehr großen Set arbeiten, können Sie das Obige in einen Generator verwandeln und Speicher sparen. –

+0

Ich habe mich darauf konzentriert, das OP zu reparieren, aber in der Tat, wenn es sich nicht um Sonderzeichen handelt, ist dies viel einfacher und vorzuziehen. – mkiever

Verwandte Themen