Часто нам нужно найти символ в строке python. Для решения этой задачи разработчики используют метод find()
. Он помогает найти индекс первого совпадения подстроки в строке. Если символ или подстрока не найдены, find возвращает -1.
Синтаксис
string.find(substring,start,end)
Метод find
принимает три параметра:
substring
(символ/подстрока) — подстрока, которую нужно найти в данной строке.start
(необязательный) — первый индекс, с которого нужно начинать поиск. По умолчанию значение равно 0.end
(необязательный) — индекс, на котором нужно закончить поиск. По умолчанию равно длине строки.
Параметры, которые передаются в метод, — это подстрока, которую требуются найти, индекс начала и конца поиска. Значение по умолчанию для начала поиска — 0, а для конца — длина строки.
В этом примере используем метод со значениями по умолчанию.
Метод find()
будет искать символ и вернет положение первого совпадения. Даже если символ встречается несколько раз, то метод вернет только положение первого совпадения.
>>> string = "Добро пожаловать!"
>>> print("Индекс первой буквы 'о':", string.find("о"))
Индекс первой буквы 'о': 1
Поиск не с начала строки с аргументом start
Можно искать подстроку, указав также начальное положение поиска.
В этом примере обозначим стартовое положение значением 8 и метод начнет искать с символа с индексом 8. Последним положением будет длина строки — таким образом метод выполнит поиска с индекса 8 до окончания строки.
>>> string = "Специалисты назвали плюсы и минусы Python"
>>> print("Индекс подстроки 'али' без учета первых 8 символов:", string.find("али", 8))
Индекс подстроки 'али' без учета первых 8 символов: 16
Поиск символа в подстроке со start и end
С помощью обоих аргументов (start
и end
) можно ограничить поиск и не проводить его по всей строке. Найдем индексы слова «пожаловать» и повторим поиск по букве «о».
>>> string = "Добро пожаловать!"
>>> start = string.find("п")
>>> end = string.find("ь") + 1
>>> print("Индекс первой буквы 'о' в подстроке:", string.find("о", start, end))
Индекс первой буквы 'о' в подстроке: 7
Проверка есть ли символ в строке
Мы знаем, что метод find()
позволяет найти индекс первого совпадения подстроки. Он возвращает -1
в том случае, если подстрока не была найдена.
>>> string = "Добро пожаловать!"
>>> print("Есть буква 'г'?", string.find("г") != -1)
Есть буква 'г'? False
>>> print("Есть буква 'т'?", string.find("т") != -1)
Есть буква 'т'? True
Поиск последнего вхождения символа в строку
Функция rfind()
напоминает find()
, а единое отличие в том, что она возвращает максимальный индекс. В обоих случаях же вернется -1
, если подстрока не была найдена.
В следующем примере есть строка «Добро пожаловать!». Попробуем найти в ней символ «о» с помощью методов find()
и rfind()
.
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом rfind:", string.rfind("о"))
Поиск 'о' методом rfind: 11
Вывод показывает, что find()
возвращает индекс первого совпадения подстроки, а rfind()
— последнего совпадения.
Второй способ поиска — index()
Метод index()
помогает найти положение данной подстроки по аналогии с find()
. Единственное отличие в том, что index()
бросит исключение в том случае, если подстрока не будет найдена, а find()
просто вернет -1
.
Вот рабочий пример, показывающий разницу в поведении index()
и find()
:
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом index:", string.index("о"))
Поиск 'о' методом index: 1
В обоих случаях возвращается одна и та же позиция. А теперь попробуем с подстрокой, которой нет в строке:
>>> string = "Добро пожаловать"
>>> print("Поиск 'г' методом find:", string.find("г"))
Поиск 'г' методом find: 1
>>> print("Поиск 'г' методом index:", string.index("г"))
Traceback (most recent call last):
File "pyshell#21", line 1, in module
print("Поиск 'г' методом index:", string.index("г"))
ValueError: substring not found
В этом примере мы пытались найти подстроку «г». Ее там нет, поэтому find()
возвращает -1, а index()
бросает исключение.
Поиск всех вхождений символа в строку
Чтобы найти общее количество совпадений подстроки в строке можно использовать ту же функцию find()
. Пройдемся циклом while по строке и будем задействовать параметр start
из метода find()
.
Изначально переменная start
будет равна -1, что бы прибавлять 1 у каждому новому поиску и начать с 0. Внутри цикла проверяем, присутствует ли подстрока в строке с помощью метода find.
Если вернувшееся значение не равно -1, то обновляем значением count.
Вот рабочий пример:
my_string = "Добро пожаловать"
start = -1
count = 0
while True:
start = my_string.find("о", start+1)
if start == -1:
break
count += 1
print("Количество вхождений символа в строку: ", count )
Количество вхождений символа в строку: 4
Выводы
- Метод
find()
помогает найти индекс первого совпадения подстроки в данной строке. Возвращает -1, если подстрока не была найдена. - В метод передаются три параметра: подстрока, которую нужно найти,
start
со значением по умолчанию равным 0 иend
со значением по умолчанию равным длине строки. - Можно искать подстроку в данной строке, задав начальное положение, с которого следует начинать поиск.
- С помощью параметров
start
иend
можно ограничить зону поиска, чтобы не выполнять его по всей строке. - Функция
rfind()
повторяет возможностиfind()
, но возвращает максимальный индекс (то есть, место последнего совпадения). В обоих случаях возвращается -1, если подстрока не была найдена. index()
— еще одна функция, которая возвращает положение подстроки. Отличие лишь в том, чтоindex()
бросает исключение, если подстрока не была найдена, аfind()
возвращает -1.find()
можно использовать в том числе и для поиска общего числа совпадений подстроки.
Теги: java, string, символ, поиск, строка, метод, буква, знак, contains
В этой статье мы рассмотрим, как выполнять поиск букв и других символов в строке Java, а также как проверять, находится ли нужный символ, буква или слово в строке, начиная с указанного индекса.
Строкой в Java называют упорядоченную последовательность символов. Как правило строка в Java — это один из основных носителей текстовой информации.
Для работы со строками в Java применяют классы String, StringBuilder и StringBuffer. Класс String включает методы, возвращающие позицию символа либо подстроки в строке:
— indexOf() — для поиска с начала строки;
— lastIndexOf() — для выполнения поиска с конца строки.
Таким образом, если метод indexOf() найдёт заданную букву, символ либо строку, он вернёт индекс, то есть порядковый номер. Если не найдёт, будет возвращено -1. Также он позволяет искать символ или букву, начиная с указанного индекса.
Кроме того, стоит добавить, что класс String включает в себя ещё и метод contains, возвращающий true, когда в строке содержится заданная последовательность символов. Этот метод рекомендуется использовать лишь тогда, когда вам просто нужно узнать о существовании подстроки в строке, при этом позиция не имеет значения.
Метод indexOf()
Библиотека метода:
Синтаксис следующий:
public int indexOf(char ch) public int indexOf(char ch, int fromIndex)либо
public int indexOf(String s) public int indexOf(String s, int fromIndex)Соответственно, вызвать метод можно тоже несколькими способами:
int index = str1.indexOf(myChar); int index = str1.indexOf(myChar, start);или:
int index = str1.indexOf(myString); int index = str1.indexOf(myString, start);Представьте, что нам нужно отыскать в строке индекс первого вхождения требуемого символа/буквы, а также нужного слова. Как уже было сказано выше, метод indexOf() вернёт нам индекс первого вхождения, а в случае неудачи — вернёт -1.
Посмотрите на следующий код:
public class Main { public static void main(String[] args) { String str = "Otus — онлайн-образование"; int indexM = str.indexOf("з"); // Ищем символ в строке int indexJava = str.indexOf("онлайн"); // Ищем слово в строке if(indexM == - 1) { System.out.println("Символ "з" не найден."); } else { System.out.println("Символ "з" найден, его индекс: " + indexM); } if(indexJava == - 1) { System.out.println("Слово "онлайн" не найдено."); } else { System.out.println("Слово "онлайн" найдено, его индекс: " + indexJava); } } }Результат получим следующий:
Символ "з" найден, его индекс: 18 Слово "онлайн" найдено, его индекс: 7Метод contains
Бывают ситуации, когда нам необходимо проверить, содержит ли наша строка конкретный символ/букву либо слово. Нижеследующий Java-код продемонстрирует и этот пример:
public class Main { public static void main(String[] args) { String str = "Otus — онлайн-образование"; System.out.println("Слово "Otus" есть в строке str? Ответ: " + str.contains("Otus")); System.out.println("Символ "z" присутствует в строке str? Ответ: " + str.contains("z")); } }В этом случае результат будет следующим:
Слово "Otus" есть в строке str? Ответ: true Символ "z" присутствует в строке str? Ответ: falseКак видите, выполнять поиск букв и других символов в строке Java совсем несложно, и наши элементарные примеры убедительно это подтверждают. Если же вы хотите получить более продвинутые навыки по Java-разработке, добро пожаловать на наш курс:
There is no simple built-in string function that does what you’re looking for, but you could use the more powerful regular expressions:
import re
[m.start() for m in re.finditer('test', 'test test test test')]
#[0, 5, 10, 15]
If you want to find overlapping matches, lookahead will do that:
[m.start() for m in re.finditer('(?=tt)', 'ttt')]
#[0, 1]
If you want a reverse find-all without overlaps, you can combine positive and negative lookahead into an expression like this:
search = 'tt'
[m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')]
#[1]
re.finditer
returns a generator, so you could change the []
in the above to ()
to get a generator instead of a list which will be more efficient if you’re only iterating through the results once.
answered Jan 12, 2011 at 2:43
moinudinmoinudin
133k45 gold badges189 silver badges214 bronze badges
9
>>> help(str.find)
Help on method_descriptor:
find(...)
S.find(sub [,start [,end]]) -> int
Thus, we can build it ourselves:
def find_all(a_str, sub):
start = 0
while True:
start = a_str.find(sub, start)
if start == -1: return
yield start
start += len(sub) # use start += 1 to find overlapping matches
list(find_all('spam spam spam spam', 'spam')) # [0, 5, 10, 15]
No temporary strings or regexes required.
answered Jan 12, 2011 at 3:13
Karl KnechtelKarl Knechtel
61.4k11 gold badges97 silver badges146 bronze badges
6
Here’s a (very inefficient) way to get all (i.e. even overlapping) matches:
>>> string = "test test test test"
>>> [i for i in range(len(string)) if string.startswith('test', i)]
[0, 5, 10, 15]
answered Jan 12, 2011 at 2:48
thkalathkala
83.4k23 gold badges155 silver badges199 bronze badges
3
Use re.finditer
:
import re
sentence = input("Give me a sentence ")
word = input("What word would you like to find ")
for match in re.finditer(word, sentence):
print (match.start(), match.end())
For word = "this"
and sentence = "this is a sentence this this"
this will yield the output:
(0, 4)
(19, 23)
(24, 28)
answered Feb 3, 2016 at 19:01
IdosIdos
15k14 gold badges58 silver badges72 bronze badges
2
Again, old thread, but here’s my solution using a generator and plain str.find
.
def findall(p, s):
'''Yields all the positions of
the pattern p in the string s.'''
i = s.find(p)
while i != -1:
yield i
i = s.find(p, i+1)
Example
x = 'banananassantana'
[(i, x[i:i+2]) for i in findall('na', x)]
returns
[(2, 'na'), (4, 'na'), (6, 'na'), (14, 'na')]
answered Dec 23, 2015 at 23:09
AkiRossAkiRoss
11.6k6 gold badges59 silver badges85 bronze badges
3
You can use re.finditer()
for non-overlapping matches.
>>> import re
>>> aString = 'this is a string where the substring "is" is repeated several times'
>>> print [(a.start(), a.end()) for a in list(re.finditer('is', aString))]
[(2, 4), (5, 7), (38, 40), (42, 44)]
but won’t work for:
In [1]: aString="ababa"
In [2]: print [(a.start(), a.end()) for a in list(re.finditer('aba', aString))]
Output: [(0, 3)]
AnukuL
5751 gold badge7 silver badges21 bronze badges
answered Jan 12, 2011 at 2:55
Chinmay KanchiChinmay Kanchi
62.1k22 gold badges86 silver badges114 bronze badges
2
Come, let us recurse together.
def locations_of_substring(string, substring):
"""Return a list of locations of a substring."""
substring_length = len(substring)
def recurse(locations_found, start):
location = string.find(substring, start)
if location != -1:
return recurse(locations_found + [location], location+substring_length)
else:
return locations_found
return recurse([], 0)
print(locations_of_substring('this is a test for finding this and this', 'this'))
# prints [0, 27, 36]
No need for regular expressions this way.
answered Nov 1, 2013 at 3:16
Cody PiersallCody Piersall
8,2142 gold badges42 silver badges57 bronze badges
2
If you’re just looking for a single character, this would work:
string = "dooobiedoobiedoobie"
match = 'o'
reduce(lambda count, char: count + 1 if char == match else count, string, 0)
# produces 7
Also,
string = "test test test test"
match = "test"
len(string.split(match)) - 1
# produces 4
My hunch is that neither of these (especially #2) is terribly performant.
answered Sep 24, 2014 at 21:12
jstaabjstaab
3,30925 silver badges40 bronze badges
1
this is an old thread but i got interested and wanted to share my solution.
def find_all(a_string, sub):
result = []
k = 0
while k < len(a_string):
k = a_string.find(sub, k)
if k == -1:
return result
else:
result.append(k)
k += 1 #change to k += len(sub) to not search overlapping results
return result
It should return a list of positions where the substring was found.
Please comment if you see an error or room for improvment.
answered Apr 1, 2015 at 9:23
ThurinesThurines
1111 silver badge3 bronze badges
This does the trick for me using re.finditer
import re
text = 'This is sample text to test if this pythonic '
'program can serve as an indexing platform for '
'finding words in a paragraph. It can give '
'values as to where the word is located with the '
'different examples as stated'
# find all occurances of the word 'as' in the above text
find_the_word = re.finditer('as', text)
for match in find_the_word:
print('start {}, end {}, search string '{}''.
format(match.start(), match.end(), match.group()))
answered Jul 6, 2018 at 9:34
Bruno VermeulenBruno Vermeulen
2,8732 gold badges14 silver badges27 bronze badges
This thread is a little old but this worked for me:
numberString = "onetwothreefourfivesixseveneightninefiveten"
testString = "five"
marker = 0
while marker < len(numberString):
try:
print(numberString.index("five",marker))
marker = numberString.index("five", marker) + 1
except ValueError:
print("String not found")
marker = len(numberString)
wingerse
3,6301 gold badge27 silver badges57 bronze badges
answered Sep 1, 2014 at 12:48
Andrew HAndrew H
46610 silver badges22 bronze badges
You can try :
>>> string = "test test test test"
>>> for index,value in enumerate(string):
if string[index:index+(len("test"))] == "test":
print index
0
5
10
15
answered Feb 27, 2018 at 6:44
Harsha BiyaniHarsha Biyani
7,0279 gold badges37 silver badges61 bronze badges
You can try :
import re
str1 = "This dress looks good; you have good taste in clothes."
substr = "good"
result = [_.start() for _ in re.finditer(substr, str1)]
# result = [17, 32]
answered Oct 25, 2021 at 10:13
2
When looking for a large amount of key words in a document, use flashtext
from flashtext import KeywordProcessor
words = ['test', 'exam', 'quiz']
txt = 'this is a test'
kwp = KeywordProcessor()
kwp.add_keywords_from_list(words)
result = kwp.extract_keywords(txt, span_info=True)
Flashtext runs faster than regex on large list of search words.
answered Sep 28, 2018 at 17:29
Uri GorenUri Goren
13.2k6 gold badges57 silver badges109 bronze badges
This function does not look at all positions inside the string, it does not waste compute resources. My try:
def findAll(string,word):
all_positions=[]
next_pos=-1
while True:
next_pos=string.find(word,next_pos+1)
if(next_pos<0):
break
all_positions.append(next_pos)
return all_positions
to use it call it like this:
result=findAll('this word is a big word man how many words are there?','word')
answered Jan 13, 2020 at 12:39
0
src = input() # we will find substring in this string
sub = input() # substring
res = []
pos = src.find(sub)
while pos != -1:
res.append(pos)
pos = src.find(sub, pos + 1)
answered May 16, 2020 at 17:05
mascaimascai
1,1251 gold badge8 silver badges26 bronze badges
1
Whatever the solutions provided by others are completely based on the available method find() or any available methods.
What is the core basic algorithm to find all the occurrences of a
substring in a string?
def find_all(string,substring):
"""
Function: Returning all the index of substring in a string
Arguments: String and the search string
Return:Returning a list
"""
length = len(substring)
c=0
indexes = []
while c < len(string):
if string[c:c+length] == substring:
indexes.append(c)
c=c+1
return indexes
You can also inherit str class to new class and can use this function
below.
class newstr(str):
def find_all(string,substring):
"""
Function: Returning all the index of substring in a string
Arguments: String and the search string
Return:Returning a list
"""
length = len(substring)
c=0
indexes = []
while c < len(string):
if string[c:c+length] == substring:
indexes.append(c)
c=c+1
return indexes
Calling the method
newstr.find_all(‘Do you find this answer helpful? then upvote
this!’,’this’)
answered Feb 15, 2018 at 20:02
This is solution of a similar question from hackerrank. I hope this could help you.
import re
a = input()
b = input()
if b not in a:
print((-1,-1))
else:
#create two list as
start_indc = [m.start() for m in re.finditer('(?=' + b + ')', a)]
for i in range(len(start_indc)):
print((start_indc[i], start_indc[i]+len(b)-1))
Output:
aaadaa
aa
(0, 1)
(1, 2)
(4, 5)
answered Jan 20, 2020 at 22:47
if you want to use without re(regex) then:
find_all = lambda _str,_w : [ i for i in range(len(_str)) if _str.startswith(_w,i) ]
string = "test test test test"
print( find_all(string, 'test') ) # >>> [0, 5, 10, 15]
answered Nov 5, 2021 at 8:38
WangSungWangSung
2192 silver badges5 bronze badges
Here’s a solution that I came up with, using assignment expression (new feature since Python 3.8):
string = "test test test test"
phrase = "test"
start = -1
result = [(start := string.find(phrase, start + 1)) for _ in range(string.count(phrase))]
Output:
[0, 5, 10, 15]
answered Apr 8, 2022 at 10:06
MikeMike
1132 silver badges6 bronze badges
I think the most clean way of solution is without libraries and yields:
def find_all_occurrences(string, sub):
index_of_occurrences = []
current_index = 0
while True:
current_index = string.find(sub, current_index)
if current_index == -1:
return index_of_occurrences
else:
index_of_occurrences.append(current_index)
current_index += len(sub)
find_all_occurrences(string, substr)
Note: find()
method returns -1
when it can’t find anything
SUTerliakov
4,6973 gold badges14 silver badges36 bronze badges
answered Oct 13, 2022 at 20:06
ulas.kesikulas.kesik
981 silver badge5 bronze badges
The pythonic way would be:
mystring = 'Hello World, this should work!'
find_all = lambda c,s: [x for x in range(c.find(s), len(c)) if c[x] == s]
# s represents the search string
# c represents the character string
find_all(mystring,'o') # will return all positions of 'o'
[4, 7, 20, 26]
>>>
perror
6,96316 gold badges58 silver badges84 bronze badges
answered Apr 10, 2018 at 19:40
2
if you only want to use numpy here is a solution
import numpy as np
S= "test test test test"
S2 = 'test'
inds = np.cumsum([len(k)+len(S2) for k in S.split(S2)[:-1]])- len(S2)
print(inds)
answered Jun 10, 2021 at 16:46
please look at below code
#!/usr/bin/env python
# coding:utf-8
'''黄哥Python'''
def get_substring_indices(text, s):
result = [i for i in range(len(text)) if text.startswith(s, i)]
return result
if __name__ == '__main__':
text = "How much wood would a wood chuck chuck if a wood chuck could chuck wood?"
s = 'wood'
print get_substring_indices(text, s)
answered Mar 16, 2017 at 1:14
黄哥Python培训黄哥Python培训
2392 silver badges5 bronze badges
1
def find_index(string, let):
enumerated = [place for place, letter in enumerate(string) if letter == let]
return enumerated
for example :
find_index("hey doode find d", "d")
returns:
[4, 7, 13, 15]
answered Nov 8, 2020 at 13:49
1
Not exactly what OP asked but you could also use the split function to get a list of where all the substrings don’t occur. OP didn’t specify the end goal of the code but if your goal is to remove the substrings anyways then this could be a simple one-liner. There are probably more efficient ways to do this with larger strings; regular expressions would be preferable in that case
# Extract all non-substrings
s = "an-example-string"
s_no_dash = s.split('-')
# >>> s_no_dash
# ['an', 'example', 'string']
# Or extract and join them into a sentence
s_no_dash2 = ' '.join(s.split('-'))
# >>> s_no_dash2
# 'an example string'
Did a brief skim of other answers so apologies if this is already up there.
answered May 19, 2021 at 13:43
als0052als0052
3893 silver badges12 bronze badges
def count_substring(string, sub_string):
c=0
for i in range(0,len(string)-2):
if string[i:i+len(sub_string)] == sub_string:
c+=1
return c
if __name__ == '__main__':
string = input().strip()
sub_string = input().strip()
count = count_substring(string, sub_string)
print(count)
answered Jun 2, 2021 at 3:24
2
I runned in the same problem and did this:
hw = 'Hello oh World!'
list_hw = list(hw)
o_in_hw = []
while True:
o = hw.find('o')
if o != -1:
o_in_hw.append(o)
list_hw[o] = ' '
hw = ''.join(list_hw)
else:
print(o_in_hw)
break
Im pretty new at coding so you can probably simplify it (and if planned to used continuously of course make it a function).
All and all it works as intended for what i was doing.
Edit: Please consider this is for single characters only, and it will change your variable, so you have to create a copy of the string in a new variable to save it, i didnt put it in the code cause its easy and its only to show how i made it work.
answered Jun 25, 2021 at 20:18
By slicing we find all the combinations possible and append them in a list and find the number of times it occurs using count
function
s=input()
n=len(s)
l=[]
f=input()
print(s[0])
for i in range(0,n):
for j in range(1,n+1):
l.append(s[i:j])
if f in l:
print(l.count(f))
barbsan
3,40811 gold badges21 silver badges28 bronze badges
answered Jul 30, 2019 at 11:44
2
To find all the occurence of a character in a give string and return as a dictionary
eg: hello
result :
{‘h’:1, ‘e’:1, ‘l’:2, ‘o’:1}
def count(string):
result = {}
if(string):
for i in string:
result[i] = string.count(i)
return result
return {}
or else you do like this
from collections import Counter
def count(string):
return Counter(string)
answered Apr 30, 2022 at 8:00
В этой статье мы расскажем о четырех способах найти подстроку в строке. У каждого способа есть плюсы и минусы — о них мы также кратко поговорим.
1) Оператор in
Простейший способ проверить наличие подстроки в строке — оператор in
. Он используется для проверки наличия элемента в какой-либо структуре данных. Этот оператор возвращает булево значение — True
или False
. Пример:
fullstring = "pythonist" substring = "python" if substring in fullstring: print "Подстрока найдена!" else: print "Подстрока не найдена!"
Этот оператор — сокращенный вызов метода __contains__
. Он подходит и для проверки наличия элемента в списке.
2) Метод String.index()
Тип string имеет метод index
. Он возвращает наименьший индекс, по которому обнаруживается начало подстроки в строке. Если подстрока не найдена, то возбуждается исключение ValueError
. Реализовать его можно с помощью блока try-except-else.
fullstring = "pythonist" substring = "python" try: fullstring.index(substring) except ValueError: print "Подстрока не найдена!" else: print "Подстрока найдена!"
Этот метод может особенно пригодиться, если вам нужно найти индекс подстроки, а не просто узнать о ее существовании.
3) Метод String.find()
Тип string
имеет еще один метод — find
. Он удобнее, чем index
, потому что благодаря ему нам не нужно думать об обработке ошибок. Если метод не находит подстроку в строке, он возвращает -1
. В случае успеха он возвращает наименьший индекс, по которому обнаруживается подстрока.
fullstring = "pythonist" substring = "python" if fullstring.find(substring) != -1: print "Подстрока найдена!" else: print "Подстрока не найдена!"
Если вы не хотите обрабатывать ошибки — отдайте предпочтение этому методу, а не index
.
4) Регулярные выражения (REGEX)
Регулярные выражения — более гибкий способ нахождения подстрок в строках. В Python есть встроенный модуль, позволяющий работать с регулярными выражениями, — re
. Модуль re
содержит функцию search
, которая позволит вам найти подстроку:
from re import search fullstring = "pythonist" substring = "python" if search(substring, fullstring): print "Подстрока найдена!" else: print "Подстрока не найдена!"
Если вам нужны сложные сопоставления, например, учет регистра — этот метод подойдет вам лучше всего. Но у него есть и недостатки: сложность и скорость работы. То есть, в простеньких задачах его лучше не использовать.
Вы не сообщили, в объекте какого типа у вас хранится строка.
Ниже показана демонстрационная программа, которая осуществляет поиск символа в символьном массиве s1
и в объекте с именем s2
класса std::string
.
#include <iostream>
#include <string>
#include <cstring>
int main()
{
char s1[] = "2 * 2 = 4";
std::string s2( s1 );
char c = '=';
char *p = std::strchr( s1, c );
if ( p != nullptr )
{
std::cout << "Character " << c << " found at position " << p - s1 << std::endl;
std::cout << "The rest of the string is "" << p << """ << std::endl;
}
std::string::size_type n = s2.find( c );
if ( n != std::string::npos )
{
std::cout << "Character " << c << " found at position " << n << std::endl;
std::cout << "The rest of the string is "" << s2.substr( n ) << """ << std::endl;
}
}
Вывод программы на консоль выглядит следующим образом:
Character '=' found at position 6
The rest of the string is "= 4"
Character '=' found at position 6
The rest of the string is "= 4"