【问题标题】:Find substring ignoring returns查找忽略返回的子字符串
【发布时间】:2014-07-04 21:04:35
【问题描述】:

如何在忽略返回的情况下从较大字符串的开头删除(子字符串)?例如,子字符串可能如下所示:

mysqldump --host="ssh.example.com" --user="jack" --password="3kg%39$(*kdsk#"

较大的字符串将如下所示(注意开头的子字符串,并且始终有一些返回):

mysqldump --host="ssh.examp
le.com" --user="jack" --password="3
kg%39$(*kdsk#"
-- more stuff that needs to remain --
Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Qua tu etiam inprudens
utebare non numquam. Sed haec quidem

如何从较大的字符串中找到并删除子字符串,以使结果如下所示:

-- more stuff that needs to remain --
Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Qua tu etiam inprudens
utebare non numquam. Sed haec quidem

从开头删除子字符串。

【问题讨论】:

  • 我认为这不会起作用,因为字符串会随着返回值而变化,对吗?
  • 我不知道你的陈述/问题是什么意思。对不起。你能详细说明吗?替换函数的 输入 不会改变。如果replace 函数确实替换了某些东西,那么函数的输出当然可能与输入不同。
  • 抱歉,我不是很清楚。我的编辑是否足够清楚地阐明了这个问题?
  • 我们需要确切地知道您正在寻找的子字符串 CAN 的样子和/或我们如何知道“更多行和数据”从哪里开始。

标签: python string substring


【解决方案1】:

旧答案:

希望我正确理解了您的规格。这是你要问的吗?

>>> s = '''mysqldump --host="ssh.examp
... le.com" --user="jack" --password="3
... kg%39$(*kdsk#"'''
>>> s = s.replace('\n','').partition(' ')[-1]
>>> s
'--host="ssh.example.com" --user="jack" --password="3kg%39$(*kdsk#"'

更新答案:

我总是会确切地知道第一个字符串是什么样的以及它有多长。第二个字符串将在开头具有第一个字符串,但返回随机分布在各处。至于第二个字符串,它可能看起来像第一个字符串结尾之后的任何内容。

在这种情况下,我会建议这样的事情。

>>> import re
>>> s = 'mysqldump --host="ssh.examp\nle.com" --user="jack" --passw\nwo\nr\n\nd\n=\n"3\nkg%39$(*kdsk#"this is the stuff\nthat"needs"to remain!'
>>> s[re.search(r'd\n*=\n*"[^"]*"', s).end():]
'this is the stuff\nthat"needs"to remain!'

【讨论】:

  • 不,这似乎从 s 中删除了所有返回... s 应该是一个更大的字符串,以命令开头,并且分布在各处的未知数量的返回。
  • @yajtheman 在这种情况下,我不明白你的问题。请通过输入和预期输出的示例更清楚地说明您想要做什么。
  • 使用str.partition(' ')[-1]而不是str.find()和切片。
  • 差不多,但我事先不知道字符串是什么样子的。 r'password="[^"]+"' 匹配给定的特定子字符串的密码部分,对吧?在我看来,我只需要某种方式来匹配子字符串而忽略新行。抱歉,我不是很清楚,感谢您的帮助。
  • 你快把我逼疯了。刚才你说过你确切地知道第一个字符串的样子,除了随机换行符。
猜你喜欢
  • 2011-02-05
  • 2015-02-18
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多