【问题标题】:How to extract substrings for a normal string python如何为普通字符串python提取子字符串
【发布时间】:2018-07-13 13:43:52
【问题描述】:

我正在寻找一种方法来提取字符串的一部分(我认为它们被称为子字符串)。我一直在寻找解决方案,但还没有找到。这是一个例子: `

text = input('Insert Math Problem: ')
'''Insert substring recognition script here'''
if text contains('3') and text contains('4'):
    print('Contains three and four!')
else:
    print('Does not contain three and four.')`

例如,如果我输入What is 3 * 4,我将如何获得3 * 4 部分?我想提取的子字符串类型是操作和围绕它的两个数字。我还希望它能够灵活地找到 3*4 或 3 乘以 4。我的 Python 版本是 3.6.4,我使用的是 Mac。

【问题讨论】:

  • 让问题更具体。需要提取什么类型的子字符串?它是否涉及诸如“3 * 4”之类的数字和数学运算符,或者它是否可以包含诸如“3乘4”之类的混合?需要明确的是,这类问题没有通用的解决方案。对于简单的字符串,您可以使用特定的正则表达式,对于更复杂的问题,您需要更复杂的工具,例如词法分析器/解析器。

标签: python regex python-3.x substring


【解决方案1】:

这可以按照您想要的方式工作。这会使用re 模块从文本中提取涉及数字和数学运算符(+、/、*、-)的子字符串。

import re 
text = 'foo 3 * 4 - 5 / 6 + 7 foo' 
regex = r'\d+|[+/*-]'   
elem = re.findall(regex, text) 
result = ' '.join(i for i in elem)
print(result)

输出:

3 * 4 - 5 / 6 + 7

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点,一种选择是使用re 模块来识别第一个数字(\d),然后将余数(*)捕获为子字符串:

    import re
    substring = re.sub('^[^\d]*', '', text)
    
    print substring
    

    输出:

    3 * 4
    

    【讨论】:

    • 这对减法有用吗?我尝试了您的答案,但不是在 [^\d] 之后使用 *,而是将 - 用于减法。
    • 另外,你如何检测单词之间的子字符串?例如,Foo 3 * 4 foo.
    • 是的,这适用于其他输入。您无需更改符号即可使用减法。脚本中的 * 不是乘法,而是用于在子字符串中重复字符的正则表达式语法。在此处运行脚本:repl.it/@downshift/WeightyBustlingVelociraptor,不同输入'What is 3 - 4'等,只返回操作3 - 4部分。
    • 也许你的目标更具体,我误解了你的问题。我的答案不会像您的示例中那样检测到字符串的多个部分。检查 cmets 和其他答案,并为我们提供更多详细信息。感谢您的反馈。
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    相关资源
    最近更新 更多