【问题标题】:Get Post number(digits) In a String获取字符串中的邮政编号(数字)
【发布时间】:2015-03-10 05:18:07
【问题描述】:

如何在@之后和之前找到数字(帖子编号);;因为字符串中还有其他数字。最后,它产生了 [507, 19, 1]。

例子:

   post507 = "@507::empty in Q1/Q2::can list be empty::yes"
   post19 = "@19::Allowable functions::empty?, first, rest::"
   post1 = "@1::CS116 W2015::Welcome to first post::Thanks!"
   cs116 =   [post507, post1, post19]


   print (search_piazza(cs116, "l")) =>[507,1,19]

【问题讨论】:

  • 您的预期结果是什么?你有没有尝试过?

标签: python string


【解决方案1】:
(?<=@)\d+

使用lookbehind。查看演示。

https://regex101.com/r/eS7gD7/33#python

import re
p = re.compile(r'(?<=@)\d+', re.IGNORECASE | re.MULTILINE)
test_str = "\"@507empty in Q1/Q2can list be emptyyes\"\n \"@19Allowable functionsempty?, first, rest\"\n \"@1CS116 W2015Welcome to first postThanks!"

re.findall(p, test_str)

iF 输入在list

使用

x=["@507;;empty in Q1/Q2;;can list be empty;;yes",
"@19;;Allowable functions;;empty?, first, rest;;",
"@1;;CS116 W2015;;Welcome to first post;;Thanks!"]
print [re.findall(r"(?<=@)\d+",k) for k in x]

【讨论】:

  • 不用import re能做到吗?
  • @YeYang 没有 re 你将不得不使用 find,split 等。不会是更干净的代码
  • 我尝试了拆分,使用 str.split 将它们分开
  • @YeYang 你是怎么试的。你的test_str是什么@
  • (list (map (lambda x: str.split(x) fn-name)))
【解决方案2】:

如何在@之后和;;之前的字符串中查找数字(帖子编号)

re.findall 与 list_comprehension 一起使用。

>>> l = ["@507;;empty in Q1/Q2;;can list be empty;;yes",
    "@19;;Allowable functions;;empty?, first, rest;;",
    "@1;;CS116 W2015;;Welcome to first post;;Thanks!"]
>>> [j for i in l for j in re.findall(r'@(\d+);;', i)]
['507', '19', '1']

最后将得到的数字转换为整数。

>>> [int(j) for i in l for j in re.findall(r'@(\d+);;', i)]
[507, 19, 1]

没有正则表达式。

>>> l = ["@507;;empty in Q1/Q2;;can list be empty;;yes",
    "@19;;Allowable functions;;empty?, first, rest;;",
    "@1;;CS116 W2015;;Welcome to first post;;Thanks!"]
>>> for i in l:
        for j in i.split(';;'):
            for k in j.split('@'):
                if k.isdigit():
                    print(k)


507
19
1

列表理解:

>>> [int(k) for i in l for j in i.split(';;') for k in j.split('@') if k.isdigit()]
[507, 19, 1]

【讨论】:

  • 不使用 import re 能做到吗?就像使用一些 str 函数
  • 我是python初学者,i和j分别代表什么?
  • 简单代码?我认为没有比第二种方法更简单的代码了。
  • 迭代列表 l 中的每个元素,并且每个元素在每次迭代时都分配给变量 i。同样,j 表示根据;; 拆分i 时生成的列表中的每个元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2019-06-06
  • 2015-05-21
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多