python 找出全部子串位置:两个字符串s1,s2,找出s2在s1中所有出现的位置。
时间: 2023-05-26 19:04:06 浏览: 116
可以使用Python的字符串方法`find()`或者正则表达式来实现找出s2在s1中所有出现的位置。
方法一:使用字符串方法`find()`
```python
s1 = "hello world, hello python, hello java"
s2 = "hello"
pos = []
i = 0
while i < len(s1):
j = s1.find(s2, i)
if j == -1:
break
pos.append(j)
i = j + 1
print(pos) # [0, 12, 24]
```
方法二:使用正则表达式
```python
import re
s1 = "hello world, hello python, hello java"
s2 = "hello"
pos = [i.start() for i in re.finditer(s2, s1)]
print(pos) # [0, 12, 24]
```
以上两种方法均可以找出s2在s1中所有出现的位置。
相关问题
编写一个程序,输入两个字符串 s1 和 s2 ,判断 s2 是否是 s1 的子串,如果是,则输出 s2 在 s1 中的起始位置。否则输出 0 输入:两个字符串 s1 和 s2 输出:s2 在 s1 中的起始位置 或者 输出 0
好的,这是一个字符串匹配的问题,可以使用 KMP 算法来解决。以下是 Python3 的实现代码:
```python
def kmp(s1, s2):
n1, n2 = len(s1), len(s2)
nxt = [-1] * n2
# 构建 next 数组
i, j = 0, -1
while i < n2 - 1:
if j == -1 or s2[i] == s2[j]:
i, j = i+1, j+1
nxt[i] = j
else:
j = nxt[j]
# 匹配
i, j = 0, 0
while i < n1 and j < n2:
if j == -1 or s1[i] == s2[j]:
i, j = i+1, j+1
else:
j = nxt[j]
if j == n2:
return i - n2
else:
return 0
```
其中,`nxt` 数组存储了模式串 `s2` 的前缀和后缀最长公共子串长度,用于加速匹配过程。在匹配时,不断地根据 `nxt` 数组调整 `j` 的值,直到匹配成功或者 `s1` 被扫描完毕。如果匹配成功,则返回匹配位置,否则返回 0。
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
可以使用字符串替换的方法来实现删除字符串S1中所有出现的子串S2。具体步骤如下:
1. 使用字符串的 replace() 方法,将S1中所有的S2替换为空字符串 ""。
2. 返回替换后的S1字符串。
以下是 Python 代码实现:
```python
def delete_substring(s1, s2):
return s1.replace(s2, "")
```
示例:
```python
s1 = "hello world, world is beautiful"
s2 = "world"
result = delete_substring(s1, s2)
print(result) # 输出:hello , is beautiful
```
注意:该方法只能删除S1中出现的所有S2子串,无法处理S1中某些子串被S2包含的情况。例如,若S1="hello worl",S2="world",则该方法无法处理。
阅读全文