【问题标题】:Find number after a substring in string [closed]在字符串中的子字符串之后查找数字[关闭]
【发布时间】:2018-02-03 17:40:54
【问题描述】:

希望有可以在字符串中的子字符串之后找到数字的函数,例如:

>>> find_number('abc123de34','e')
34
>>> find_number('abc123de34','de')
34

最好的方法是什么?

【问题讨论】:

  • 您的当前方法是什么?为什么您认为可以改进?您已标记此regex,那么您是否尝试编写正则表达式?
  • 'abc123de34'['abc123de34'.index('e'):], 'abc123de34'['abc123de34'.index('de'):] 假设子字符串存在。

标签: python regex string python-3.x python-2.7


【解决方案1】:

正则表达式char(\d+)

详情:

  • \d 匹配一个数字(等于[0-9]
  • + 匹配一次到无限次
  • ()抓拍组

Python 代码

字符串格式化语法"%s" % var%s 标记允许插入(并可能格式化)字符串。

def find_number(text, c):
    return re.findall(r'%s(\d+)' % c, text)

find_number('abce123de34', 'e') >> ['123', '34']
find_number('abce123de34', 'de') >> ['34']

【讨论】:

  • 特别是对于 pandas 数据框,我使用了上面的公式并将其与 lambda 函数一起应用以创建一个新列。 dataset['new column'] = dataset.apply(lambda x: find_number(x['your column with the string you are search'], 'text'), axis=1)
【解决方案2】:

以下程序有效。但是还可以改进很多。

def func(string, sub):
    subpos = string.find(sub)
    new_string = string[subpos + 1:]
    for x in new_string:
        try:
            int(x)
        except:
            endpos = new_string.find(x)
            break

    num = string[subpos + 1:subpos + endpos + 1]
    return num

string = 'abc12de34fg'
sub = 'e'
num = func(string, sub)
print(num)

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2015-08-31
    • 2017-04-25
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多