如何在python中更准确地找到目标字符串中的子字符串?

2024-06-15 05:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道“in”可以在另一个字符串中找到这样的子字符串。[How to determine whether a substring is in a different string

但我不知道如何在下面的示例中准确地找到子字符串:

text = '"Peter,just say hello world." Mary said "En..."' 

我想判断“彼得”是否在文本中,而不是在“XXXX”内容中。如果我使用

if 'Peter' in text: 
    print 'yes' 
else: 
    print 'no'

但是结果返回“yes”,这是错误的,因为“Peter”在“XXXXX”中。你知道吗

除了解决这个问题,我还想得到左边的“XXXX”内容。例如,“Mary”是文本而不是“XXXX”内容。我还想听到“彼得,向世界问好”。你知道吗


Tags: to字符串textin文本内容substringyes
2条回答

像许多字符串处理问题一样,regular expressions是您的朋友。处理此问题的一种方法是从字符串的前面开始,并以增量方式处理它。你知道吗

检查字符串的开头以查看它是无引号的文本还是带引号的文本。如果没有引号,把所有没有引号的文本都去掉,直到找到引号为止。如果是引用的文本,请删除所有内容,直到找到结束引用。继续处理文本,直到所有文本都被处理并分类为带引号或不带引号。你知道吗

然后将有两个单独的带引号和不带引号的文本字符串列表。然后可以在任一列表中执行字符串包含检查。你知道吗

text = '"Peter,just say hello world." Mary said "En..."' 

unquoted_text = []
quoted_text = []

while text:
    # Pull unquoted text off the front
    m = re.match(r'^([^"]+)(.*)$', text)
    if m:
        unquoted_text.append(m.group(1))
        text = m.group(2)

    # Pull quoted text off the front
    m = re.match(r'^"([^"]*)"(.*)$', text)
    if m:
        quoted_text.append(m.group(1))
        text = m.group(2)

    # Just in case there is a single unmatched double quote (bad!)
    # Categorize as unquoted
    m = re.match(r'^"([^"]*)$', text)
    if m:
        unquoted_text.append(m.group(1))
        text = ''

print 'UNQUOTED'
print unquoted_text

print 'QUOTED'
print quoted_text

is_peter_in_quotes = any(['Peter' in t for t in quoted_text])

为了满足你自己的特殊要求,我认为这是一个很好的方式来处理文字的字母,这是一个很好的方式来训练你的技能处理字符串。对于这个问题,可以使用堆栈存储双引号,这样就可以判断一个字母是否在双引号中。你知道吗

相关问题 更多 >