【问题标题】:getting string between 2 characters in python在python中获取2个字符之间的字符串
【发布时间】:2013-02-09 04:49:30
【问题描述】:

我需要将字符串中的某些单词转换为新格式。例如,我用输入调用函数:

text2function('$sin (x)$ is an function of x')

我需要将它们放入 StringFunction:

StringFunction(function, independent_variables=[vari])

我只需要为函数获取“sin (x)”,为 vari 获取“x”。所以它最终看起来像这样:

StringFunction('sin (x)', independent_variables=['x']

问题是,我似乎无法获得函数和变量。我试过了:

start = string.index(start_marker) + len(start_marker)
end = string.index(end_marker, start)
return string[start:end]

r = re.compile('$()$')
m = r.search(string)
if m:
     lyrics = m.group(1)

send = re.findall('$([^"]*)$',string)

似乎一切都没有给我任何东西。难道我做错了什么?感谢所有帮助。谢谢。

【问题讨论】:

    标签: python string function character extraction


    【解决方案1】:

    $ 是正则表达式中的一个特殊字符(它表示字符串的结尾)。你需要逃避它:

    >>> re.findall(r'\$(.*?)\$', '$sin (x)$ is an function of x')
    ['sin (x)']
    

    【讨论】:

    • r 代表什么,我们需要它吗?
    【解决方案2】:

    你需要开始搜索第二个字符之后 start:

    end = string.index(end_marker, start + 1)
    

    因为否则它会在同一位置再次找到相同的字符:

    >>> start_marker = end_marker = '$'
    >>> string = '$sin (x)$ is an function of x'
    >>> start = string.index(start_marker) + len(start_marker)
    >>> end = string.index(end_marker, start + 1)
    >>> string[start:end]
    'sin (x)'
    

    对于您的正则表达式,$ 字符被解释为锚点,而不是文字字符。转义它以匹配文字 $ (并查找 not $ 而不是 " 的东西:

    send = re.findall('\$([^$]*)\$', string)
    

    给出:

    >>> import re
    >>> re.findall('\$([^$]*)\$', string)
    ['sin (x)']
    

    正则表达式 $()$ 否则不会真正匹配括号之间的任何内容,即使您确实转义了 $ 字符。

    【讨论】:

      【解决方案3】:

      周而复始!

      >>> char1 = '('
      >>> char2 = ')'
      >>> mystr = "mystring(123234sample)"
      >>> print mystr[mystr.find(char1)+1 : mystr.find(char2)]
      123234sample
      

      【讨论】:

      • 我真的很喜欢这个解决方案。
      • 很好的解决方案!我将它合并为 lambda 以便于重用: GetValue = lambda mystr: mystr[mystr.find(char1) + 1 : mystr.find(char2)]
      • 这展示了一个很好的基础解决方案,但不包括潜在的误报。如果字符串事先没有经过验证,你会得到不好的结果。 my)string(123sample) 或 mystring(123sample\ 将返回可能不是您想要的字符串。在这种情况下使用 str.index() 会标记损坏的数据(即“mystring(example)”)
      【解决方案4】:

      如果您想在两个相同字符之间剪切一个字符串(即!234567890!) 你可以使用

         line_word = line.split('!')
         print (line_word[1])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 2023-03-18
        • 2020-12-16
        相关资源
        最近更新 更多