'String contains any character in group?
I have a set of characters: \,/,?,% etc. I also have a string, lets say "This is my string % my string ?"
I want to check if any of the characters are present in the string.
This is not to check for a substring, but to check for a character in a set.
I could do this:
my_str.find( "/" ) or my_str.find( "\\" ) or my_str.find( "?" )
but it's very ugly and inefficient.
Is there a better way?
Solution 1:[1]
You could use any here.
>>> string = r"/\?%"
>>> test = "This is my string % my string ?"
>>> any(elem in test for elem in string)
True
>>> test2 = "Just a test string"
>>> any(elem in test2 for elem in string)
False
Solution 2:[2]
I think Sukrit probably gave the most pythonic answer. But you can also solve this with set operations:
>>> test_characters = frozenset(r"/\?%")
>>> test = "This is my string % my string ?"
>>> bool(set(test) & test_characters)
True
>>> test2 = "Just a test string"
>>> bool(set(test2) & test_characters)
False
Solution 3:[3]
Use regex!
import re
def check_existence(text):
return bool(re.search(r'[\\/?%]', text))
text1 = "This is my string % my string ?"
text2 = "This is my string my string"
print check_existence(text1)
print check_existence(text2)
Solution 4:[4]
In [1]: import re
In [2]: RE = re.compile('[\\\/\?%]')
In [3]: RE.search('abc')
In [4]: RE.search('abc?')
Out[4]: <_sre.SRE_Match at 0x1081bc1d0>
In [5]: RE.search('\\/asd')
Out[5]: <_sre.SRE_Match at 0x1081bc3d8>
None indicates non characters in the set are present in the target string.
Solution 5:[5]
And of course the most non-Pythonic way, but at least to me more readable.
Define the function:
def containsSpecialCharacters(self, string: str, test: str) -> bool:
for special in string:
if special in test:
return True
return False
This call:
string = r"/\?%"
test = "This is my string % my string ?"
print(self.containsSpecialCharacters(string, test))
returns True
This call
test2 = "Just a test string"
print(self.containsSpecialCharacters(string, test2))
returns False
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Sukrit Kalra |
| Solution 2 | Kevin Stone |
| Solution 3 | lancif |
| Solution 4 | Demian Brecht |
| Solution 5 | hasii |
