【问题标题】:Python - Split string on first occurrence of non-allowable charactersPython - 在第一次出现不允许的字符时拆分字符串
【发布时间】:2020-12-07 04:51:41
【问题描述】:

我有一些 python 代码,我想在第一次出现不允许的字符时扫描和拆分字符串。

import re,string
mystring="my_id=abc-something_123&anything#;?lcdkahck;my_id%3Dkckdkkj_bcjc"
if "my_id=" in mystring:
    mystring = mystring[mystring.index("my_id=") + 6 : len(mystring)][0:100]
    mystring = re.split('[;&#]', mystring)[0]
    print(mystring)

在这种情况下会发生什么,我在 ; 即将到来的地方正确地得到了字符串,但是我的数据可以包含任何不可预测的字符 ;。

我尝试过驱除这些字符

allowable_character = '-' + '_' + string.ascii_letters + string.digits
mystring = re.sub('[^%s]' % allowable_character, '', mystring)
print(mystring)

但这只是过滤了包含不在“allowable_character”中的字符的字符串。

我想要实现的是一旦字符不在“allowable_character”中的字符就拆分字符串并返回该字符串。

所以我希望预期输出为 'abc-something_123'

这里感谢任何帮助

【问题讨论】:

  • 给定mystring,如上所示,您想要的确切输出是什么,为什么?
  • @TimBiegeleisen - 我想要在 'my_id=' 之后的字符串,直到 '-'、'_'、字母和数字之外的任何字符。因此,如果其他字符显示为 &, ;或任何东西,我正在尝试获取子字符串。如果需要更多详细信息,请告诉我

标签: python regex string split pattern-matching


【解决方案1】:

你可以在这里使用re.findall

mystring = "my_id=abc-something_123&anything#;?lcdkahck;my_id%3Dkckdkkj_bcjc"
match = re.findall(r'^my_id=([\w-]*).*$', mystring)[0]
print(match)

打印出来:

'abc-something_123'

【讨论】:

  • 谢谢@Tim,你能从概念上解释一下吗,我是python新手
  • 正则表达式模式^my_id=([\w-]+).*$ 应用于您的整个输入,一次。它捕获my_id= 之后仅由单词字符或连字符组成的内容。
  • 我在玩你给出的解决方案,它为除“my_id=&anything#;?lcdkahck;my_id%3Dkckdkkj_bcjc”之外的所有类型的场景提供正确的值,这里 mystring 的值应该为空白,因为 my_id= 和 '&' 之间没有允许的字符。代码失败,错误 match = re.findall(r'^my_id=([\w-]+).*$', sol)[0] IndexError: list index out of range
  • 我没有看到您描述的行为。 See this demo.
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2021-01-29
  • 2016-06-07
相关资源
最近更新 更多