14

文字列から特定の単語を新しい形式に取り出す必要があります。たとえば、次の入力で関数を呼び出します。

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

4 に答える 4

9

$正規表現の特殊文字です (文字列の末尾を示します)。あなたはそれをエスケープする必要があります:

>>> re.findall(r'\$(.*?)\$', '$sin (x)$ is an function of x')
['sin (x)']
于 2013-02-23T17:28:06.840 に答える
4

を超える 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の代わりに not$のものを探します: $"

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

与える:

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

それ以外の場合、正規表現は、文字$()$をエスケープしたとしても、括弧の間は実際には何も一致しません。$

于 2013-02-23T17:29:40.663 に答える