如何在不使用正则表达式的情况下排除python中括号中的关键字?
我有一个文件,我正在阅读并按行分隔,只想打印包含关键字“Cat”的句子。不过,该文件包含以大括号格式化的旁白,例如{一旦Cat进入房间} 全文:如何在不使用正则表达式的情况下排除python中括号中的关键字?,python,python-3.x,Python,Python 3.x,我有一个文件,我正在阅读并按行分隔,只想打印包含关键字“Cat”的句子。不过,该文件包含以大括号格式化的旁白,例如{一旦Cat进入房间} 全文: 猫 {猫进了房间。}狗,你在这里干什么 狗 我在做什么,猫?我在监视警察 猫 我不知道你是个超级粉丝!这场比赛在哪个城市举行 狗 {他把椅子转向猫。}猜猜看,猫 猫 我不知道!我只是想和你谈谈 我可以打印包含我要查找的关键字的行,但是当我打印时,它也会输出大括号行。我尝试添加多个分隔符,但每次尝试都会出错 for i in catDog.split('
猫
{猫进了房间。}狗,你在这里干什么 狗
我在做什么,猫?我在监视警察 猫
我不知道你是个超级粉丝!这场比赛在哪个城市举行 狗
{他把椅子转向猫。}猜猜看,猫 猫
我不知道!我只是想和你谈谈 我可以打印包含我要查找的关键字的行,但是当我打印时,它也会输出大括号行。我尝试添加多个分隔符,但每次尝试都会出错
for i in catDog.split('\n'):
if str('Cat')in i:
print(i)
我希望输出:我在做什么,猫
猜猜看,猫 相反,我得到:
[猫进入房间。]
我在做什么,猫
[他把椅子转向猫。]
猜猜看,猫
我不想让任何人为我写代码;另外,请给我指出正确的方向。如果你知道哪些类型的括号/大括号包含你的旁白,你可以在寻找猫之前去掉那部分字符串
如果i.startswith('{'):
i=i[i.索引(“}”)+1:]
如果i中的str(“Cat”):
印刷品(一)
给定一行,如:
{Cat enters the room.} Dog, what are you doing here?
从您的问题中不清楚(a)该行是否应该匹配,(b)如果匹配,我们是否应该只打印{…}
部分之外的内容。假设在这两种情况下都是,您可以执行以下操作:
for i in catDog.split('\n'):
if str('Cat') in i:
parts = i.split('}', 1)
print(parts[1 if len(parts) > 1 else 0])
这会让你:
Dog, what are you doing here?
What does it look like I'm doing Cat? I'm watching Cops.
Take a guess Cat!
如果要忽略初始{…}
部分中的匹配项,则可以编写:
for i in catDog.split('\n'):
parts = i.split('}', 1)
if str('Cat') in parts[-1]:
print(parts[1 if len(parts) > 1 else 0])
这让你:
What does it look like I'm doing Cat? I'm watching Cops.
Take a guess Cat!
代码正在执行您要它执行的操作。在每一个句子中,单词Cat就是那一行,因此代码将返回单词Cat。还有更多我们可以查询的行吗?通过“关键字”,你是指所有大写字母的
cat
,还是也必须以行开头?@EdekiOkoh对,是否可以排除带有大括号{}的行?@chepner关键字为“cat”,当然区分大小写。为了更容易理解,我还重新格式化了代码。如果{是字符串,您可以使用类似于if“{”的东西,而不是在I中。但是在看不到行的实际表示形式的情况下,很难看出这一点,但是不可能得到结束大括号的确切位置。}index('}'))
提供位置您是否能够解释行:i=i[i.index(“}”)+1:]我很难理解如何解释它。该行将i的子字符串从“}”+1
的位置分配回变量isomestring[startIndex:endIndex]
返回一个子字符串,该子字符串从startIndex
开始,在endIndex-1
结束。离开startIndex
out意味着从头开始,离开endIndex
out意味着一直到结束<代码>索引('}')返回它找到的第一个匹配项的索引。