首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >返回句子中某个字符串的索引号

返回句子中某个字符串的索引号
EN

Stack Overflow用户
提问于 2018-11-03 16:01:16
回答 3查看 104关注 0票数 1

我正在寻找一种方法来查找句子中的某个字符串,并返回该字符串第一个字母的索引号。当然,这看起来很简单,但我偶然发现了一个我似乎找不到解决方案的问题。这项任务的难点是试图找到原始句子的索引号。所以任务是找到句子中的字符串,对于第一个例子,这是没有问题的,因为国家在第一个空格之前开始,但是对于第二个例子,情况并非如此。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
search = 'Mali' 
sentence = 'Panama lies in Central America.'

search = 'Poland'
sentence = 'The criminal was arrested by Interpol and the local police.'

所以我首先写了这个简单的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
indexnumber = sentence.lower().find(search.lower())

第一个正确返回4,第二个正确返回29 (而我需要34),因为它没有计算非alpa字符的数量。查找原始句子obv会给我一个-1,因为中间有空格。我想过尝试计算中间非字母字符的数量,但不太清楚如何做到这一点。

然后我尝试了一些过于复杂的循环,似乎工作得很好,但我相信肯定有一个更复杂的解决方案,然后这个复杂的结构。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
counter = 0
indexnr = 0
possible = []
search = search.replace(" ", "")

for charac in sentence:
    if counter <= len(search) - 1 and charac.isalpha():
        if charac.lower() == search.lower()[counter]:
            counter += 1
            possible += [indexnr]
        else:
            counter = 0
            possible = []
    indexnr += 1

print(possible[0])

基本上,这是一个for循环,它在句子中的字母等于搜索中的第一个字母时创建一个列表,然后查找搜索中的第二个字母,依此类推,直到有完全匹配并且列表的长度等于搜索的长度。如果没有完全匹配,我将计数器重置为0并再次清除列表。

虽然这是可行的,但我正在寻找一种更简单的解决方案,例如,一种告诉find函数在原始句子中查找的方法,但当它到达非字母字符时,它会忽略它或继续搜索,直到一个alpa字符搞砸了它。

对于缩进可能出现的错误,我深表歉意,这是我第一次在这里粘贴代码。

EN

回答 3

Stack Overflow用户

发布于 2018-11-03 16:43:59

使用regex库可以很容易地解决这个问题。

请阅读正则表达式库docs的正则表达式模式运算符部分和标志部分。

一旦你有了这个,就执行[pattern].search(target_string)。将输出保存到一个变量中-如果它匹配,您将获得一个匹配对象。

对于匹配的对象,您将能够通过在保存匹配对象的变量上请求.group(0).startgroup(0).end来找到开始和结束。

编辑:我已经意识到我所说的大部分都是错误的,如果单词/ if是未知的,那么用正则表达式以正常的方式解决问题就不是那么容易了。@user2849789的答案更好,而且确实支持正则表达式,但如果有人正在寻找不需要正则表达式的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
search = 'Poland'
sentence = 'The criminal was arrested by Interpol and the local police.'

srch = search.lower()

sentce = sentence.lower()

indexNr = 0

while indexNr < len(sentce):
    print("sentce[indexNr]=", sentce[indexNr]) #debug
    if sentce[indexNr] == srch[0]:
        print("Found starting char: ", srch[0])
        srchNr = 1
        spaces = 0
        while sentce[(indexNr + srchNr + spaces)] == srch[srchNr] or sentce[(indexNr + srchNr)] == " ":
            print(f"Searching for match! Search char is currently", srch[srchNr], "sentce[(indexNr + srchNr + spaces)] is '" + sentce[(indexNr + srchNr + spaces)] + "'")
            if sentce[(indexNr + srchNr + spaces)] == srch[-1]:
                print("Found word irrelevant of word boundaries! Starting index is ", indexNr)
                break
                #return indexNr
            elif sentce[indexNr + srchNr + spaces] == srch[srchNr]:
                #increment nested while loop counter
                srchNr += 1
            elif sentce[(indexNr + srchNr + spaces)] == " ":
                spaces += 1
    indexNr += 1
票数 0
EN

Stack Overflow用户

发布于 2018-11-03 16:48:31

您可以使用以下正则表达式进行搜索。这些正则表达式可以通过使用for循环来创建。

请通过以下链接查看:https://regexr.com/42eq1

我不认为有更好的选择:|

\* --这将搜索0个或更多空格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
search = 'Mali'
sentence1 = 'Panama lies in Central America.'

search = 'Poland'
sentence = 'The criminal was arrested by Interpol and the local police.'


p = re.compile("[m][\ ]*[a][\ ]*[l][\ ]*[i]")
p = re.compile("[p][\ ]*[o][\ ]*[l][\ ]*[a][\ ]*[n][\ ]*[d]")

indexnumber = sentence.lower().find(search.lower())
print(indexnumber)
print(re.search(p,sentence).start())
票数 0
EN

Stack Overflow用户

发布于 2018-11-03 19:05:14

谢谢你们的回复。我相信你指的是这样的东西?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for charac in search:
    if charac.isalpha():
        regexpr += '[' + charac.lower() + '][\ ]*'

q = re.compile(regexpr)

indexnr = re.search(q, sentence).start()

我还在努力学习reg的表达方式。例如,如果我没有弄错,如果我也想忽略逗号,我应该用我自己的表达式修改\*。

编辑:如果你只是评论,有没有可能也格式化你的代码?没有立即找到,所以我不得不回答我自己的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53133038

复制
相关文章
SpringMVC返回不带引号的字符串方案汇总
项目使用springboot开发的,大部分出参为json,使用的fastJson。
chenchenchen
2021/09/06
2.3K0
去除字符串中的双引号「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142601.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
2.7K0
【Python】字符串 ① ( Python 字符串定义形式 | 单引号定义法 | 双引号定义法 | 三引号定义法 | 字符串中包含单引号或双引号的处理方式 )
文章目录 一、Python 字符串定义形式 二、字符串中包含 单引号 / 双引号 一、Python 字符串定义形式 ---- Python 字符串定义形式 : 单引号定义法 : name = 'Tom' 双引号定义法 : name = "Tom" 三引号定义法 : 该定义方式与多行注释相同 , 使用 三引号 定义字符串 : 如果使用变量接收 , 那么定义的就是字符串 ; 如果没有变量接收 , 那么定义的就是多行注释 ; name = """Tom""" 代码示例 : # 单引号定义字符串 nam
韩曙亮
2023/04/07
3.2K0
【Python】字符串 ① ( Python 字符串定义形式 | 单引号定义法 | 双引号定义法 | 三引号定义法 | 字符串中包含单引号或双引号的处理方式 )
delphi字符串加引号_oracle 单引号
sp_qry.Close; sp_qry.SQL.Clear; sp_qry.SQL.Add(‘select * from item_info where item_clsno=’+quotedstr(sp_lb.KeyValue)); sp_qry.Open;
全栈程序员站长
2022/11/10
1.4K0
MySQL中的单引号和双引号
《请注意前方高能有引号!》提到过Oracle中引号的处理,其实不仅是Oracle,其他的数据库中,同样存在引号是否使用正确的问题,看到社区的这篇文章,就介绍了MySQL中对单引号和双引号的几种使用场景,可以借鉴学习。
bisal
2023/01/08
4.6K0
MySQL中的单引号和双引号
TeX中的引号
在TeX中,左引号是"“",右引号是"”"。输入一篇包含双引号的文章,你的任务时把它转换成TeX的格式。
Vincent-yuan
2020/05/26
1K0
python3 引号中嵌套引号
我们有时候需要在引号中嵌套引号。例如输入一段完整的代码print(str+'你好'),而代码中有引号。
py3study
2020/01/13
3.7K0
【说站】js字符串中的三种引号
2、单引号和双引号基本相同。反引号允许我们通过${…}在字符串中嵌入任何表达式。允许字符串换行。
很酷的站长
2022/11/24
1.5K0
tomcat返回cookie有双引号问题
2.问题发现 发现与平时的cookie属性不一样,多了一个version=1的额外项。 经了解还有version=0的场景。 因为代码是一致的,在其他tomcat版本执行,没有问题,所以想到是tomcat版本不一致导致的。 目前场景所用的版本为: tomcat 8.0.35 而正常可使用的tomcat版本是较高的版本8.5.6
MickyInvQ
2020/09/27
1.5K0
Python中单引号,双引号,3个单引号
我们知道Python以其易用性而著名,所以刚开始看教程学习看到单引号和双引号都可以使用会以为这是Python为了方便程序员,随便用哪个就好,不用担心用错。其实,背后的原因不只是这么简单。举个例子,想想I'm a big fans of Python.这个字符串应该怎么定义。
py3study
2020/01/13
3.8K0
获取字符串内双引号中的所有内容
测试字符串 String str = "[\"内容\",\"标题\"]"; 编码如下: package Action; import java.util.regex.Matcher; import java.util.regex.Pattern; public class demo { public static void main(String[] args) { String str = "[\"内容\",\"标题\"]"; Pattern p = Pattern.compile("\"
红目香薰
2022/11/29
4.5K0
获取字符串内双引号中的所有内容
Python 引号、注释、字符串
Python3.6.3    json==2.0.9    win10.0.17134
用户7886150
2021/01/13
9420
判断数组中是否包含某个元素,判断对象中是否包含某个属性,判断字符串中是否包含某个字符串片段[通俗易懂]
缺点: hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
全栈程序员站长
2022/09/28
3.3K0
[oeasy]python0052_ raw格式字符串_单引号_双引号_反引号_ 退格键
转义字符回忆上次内容最近玩的是\n、\r 之外的转义序列 \a是 ␇ (bell)\t是 水平制表符\v是 换行不回车通过 16 进制数值转义 \xhh把(hh)16 进制对应的 ascii 字符输出通过 8 进制数值转义 \ooo把(nnn)8 进制对应的 ascii 字符输出这次加了 转义输出 反斜杠本身 \\ 输出 \总是转义 还是挺麻烦的能否直接输出原样输出呢?搜索帮助找到raw stringrawr的含义是 raw原始原样如果是有r就原样输出为什么raw就是原始原样呢?raw生的食物 没有
oeasy
2023/01/17
1.7K0
[oeasy]python0052_ raw格式字符串_单引号_双引号_反引号_ 退格键
Bash Shell 中单引号和双引号的区别
你会经常在 Linux 命令行中使用引号,处理文件名中的空格?你使用引号。处理特殊字符?你再次使用引号。
网络技术联盟站
2022/04/12
3.7K0
Bash Shell 中单引号和双引号的区别
php中的双引号与单引号的基本使用
PHP字符串变量用于存储并处理文本, 在创建字符串之后,我们就可以对它进行操作。我们可以直接在函数中使用字符串,或者把它存储在变量中
itclanCoder
2023/09/14
5900
php中的双引号与单引号的基本使用
shell字符串单双引号的坑
运行非常成功!结果正常输出!然后我就愉快地去重并call variant,但是当我查看g.vcf文件时发现样本名为W0
生信技能树
2021/02/04
5K0
python笔记22-literal_eval函数处理返回json中的单双引号
在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常理出牌,如下这种,result对应的是一个list数据,却又加了单引号变成了一个字符串 严格意义来讲,json串里面应该都是双引号,这种单双交替的就尴尬了
上海-悠悠
2018/07/25
2.4K0
python笔记22-literal_eval函数处理返回json中的单双引号
json.loads()的字符串中为单引号引发的错误
Traceback (most recent call last): File "G:/FastWorkStateServer/logs/redis_fabu.py", line 20, in <module> print(json.loads(str2)) File "D:\python3.6.5\lib\json\__init__.py", line 354, in loads return _default_decoder.decode(s) File "D:\python3.6.5\lib\json\decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "D:\python3.6.5\lib\json\decoder.py", line 355, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
用户1558882
2018/10/10
3.3K0
点击加载更多

相似问题

匹配句子中的多引号

23

强迫包含引号的句子为字符串- Java

41

如何返回字符串“句子”中的字数

15

LINQ根据引号将字符串拆分成句子

41

如何提取段落中的某个句子?Python

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文