在Python中获取两个字符之间的字符串

15
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我需要从字符串中获取特定的单词并将其转换成新的格式。例如,我使用以下输入调用函数:

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

我需要将它们放入一个StringFunction中:
StringFunction(function, independent_variables=[vari])

我需要获取函数中的'sin(x)'和变量中的'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)

所有的东西都似乎给我带来了无用的结果。我做错了什么吗?非常感谢任何帮助。谢谢。

4个回答

29

轻松愉快的方式!

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

1
我非常喜欢这个解决方案,它非常适合我目前的工作。 - Jiminion
太棒了!我把它作为一个 Lambda 函数加入了代码,以便于重复使用:GetValue = lambda mystr: mystr[mystr.find(char1) + 1 : mystr.find(char2)] - M_N1
这展示了一个良好的基础解决方案,但并未涵盖潜在的误报情况。如果字符串未经过验证,将会得到错误的结果。例如my)string(123sample)或mystring(123sample\,这些字符串可能不是您想要的。在这种情况下使用str.index()将标记损坏的数据(即"mystring(example)")。 - DevPlayer

9

$是正则表达式中的特殊字符(它表示字符串的结尾)。您需要对其进行转义:

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

r代表什么?我们需要它吗? - alper
原始字符串,使其将 \ 视为转义字符。 - Sean

7
如果你想在两个相同字符之间截取一个字符串(例如,!234567890!),你可以使用:

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

4
你需要开始搜索第二个字符,超出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)'

在您的正则表达式中,$ 字符被解释为锚定符号而非字面字符。请使用转义字符来匹配字面的 $ (并寻找不是 " 而是不是 $ 的内容):

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

这将会得到:

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

正则表达式$()$,即使你转义了$字符,也不会真正匹配括号中的任何内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接