【问题标题】:Search text in string python在字符串 python 中搜索文本
【发布时间】:2013-04-18 17:21:10
【问题描述】:

我有以下字符串

aaa\bbb\ccc\ddd **16 April**\xyz

日期(在本例中为 4 月 16 日)会根据事件的开始时间而变化,字符串其余部分的格式可能会变短或变长(如下)

aaa\bbb\ccc\ddd\**eee** **16 April**\xyz

我希望始终能够选择“4 月 16 日”,而不管剩余变量的剩余长度如何。日期并不总是“4 月 16 日”,而是外部程序为我提供的任何事件的开始日期。

我想我能做到

if April in 'aaa\bbb\ccc\ddd\**eee** **16 April**\xyz': 
   print 'success'

但我不知道是否有更好的方法......

我需要这样做,以便我可以将日期重新格式化为 16-04-2013..

【问题讨论】:

  • 您可以使用正则表达式来完成此操作,但简单的 python String 方法(此处隐式使用)通常更快并且避免不必要的导入。
  • 你可以使用正则表达式来获取日期部分,然后检查值是否为date
  • 它是某种`\`-delimited csv吗?

标签: python regex datetime text-extraction


【解决方案1】:

应该这样做。

import datetime
import re

# Note the \\x to escape \x
foo = "aaa\bbb\ccc\ddd **16 April**\\xyz"
bar = "aaa\bbb\ccc\ddd\**eee** **1 December**\\xyz"

# Could do \d+ and \w+ aswell, it doesn't seem to matter too much in this situation
pattern = '\*\*(\d{1,2} \w{4,9})\*\*'

# "16 April" etc
foo_format = re.search(pattern, foo).group(1)
bar_format = re.search(pattern, bar).group(1)

year = str(datetime.datetime.now().year)

# Datetime object
foo_date = datetime.datetime.strptime(year + " " + foo_format, "%Y %d %B")
bar_date = datetime.datetime.strptime(year + " " + bar_format, "%Y %d %B")

print foo_date.strftime("%Y-%m-%d")
print bar_date.strftime("%Y-%m-%d")

Why is '\x' invalid in Python? 中了解更多关于\x 的信息

【讨论】:

    【解决方案2】:

    您可以使用正则表达式

    import re
    
    a = re.search("16 April", "sample string")
    print a.group(0)
    

    如果最后一条语句在字符串中,则返回“16 April”或None

    【讨论】:

    • 不够灵活。应该处理 OP 给出的格式的任何日期,并且不必明确地搜索日期。
    • 我只是举个例子。第一个参数应该是一个正则表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多