Re: test if an input string starts with a python expression

2009-12-07 Thread zeph
It sort of sounds like you want a templating system:
http://wiki.python.org/moin/Templating
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: test if an input string starts with a python expression

2009-12-07 Thread r0g
Torsten Mohr wrote:
 Hi,
 
 i'd like to test if an input string starts with a python expression
 and also where that expression ends.  An example:
 
 a_func(3*7, '''abc''') +5 pls some more
 
 The first part until (inclusive) the 5 should be found as an expression
 and the length of that string should also be detected.
 
 
 Background is that i want to embed some python expressions in a text
 and i want to evaluate them later.
 It is possible that the embedded expressions span several lines.
 
 Alternatively, is it possible to define a start- and an end-marker
 that define the embedded expression and find the expression using
 a regular expression?


That's the easy way and will work for most cases if you use uncommon
delimiters. I tend to use '' and '' for things like this but you
can make them as obscure as you like.



 If the expression contains strings, these strings could contain
 the end-marker which should not be found inside strings.


You could build in escaping but that complicates things quite quickly,
assuming this is for your own private use and you won't be dealing with
huge rafts of data from elsewhere or using this to control radiotherapy
machines etc, that's probably overkill.


The re module should do everything you need and is part of the standard lib.


 import re
 regex = re.compile(r'(.{1,500}?)', re.DOTALL)
 regex.findall(the cat sat on the mat)
['sat', 'mat']

Hope this helps,

Roger.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: test if an input string starts with a python expression

2009-12-07 Thread Richard Thomas
On Dec 8, 1:22 am, r0g aioe@technicalbloke.com wrote:
 Torsten Mohr wrote:
  Hi,

  i'd like to test if an input string starts with a python expression
  and also where that expression ends.  An example:

  a_func(3*7, '''abc''') +5 pls some more

  The first part until (inclusive) the 5 should be found as an expression
  and the length of that string should also be detected.

  Background is that i want to embed some python expressions in a text
  and i want to evaluate them later.
  It is possible that the embedded expressions span several lines.

  Alternatively, is it possible to define a start- and an end-marker
  that define the embedded expression and find the expression using
  a regular expression?

 That's the easy way and will work for most cases if you use uncommon
 delimiters. I tend to use '' and '' for things like this but you
 can make them as obscure as you like.

  If the expression contains strings, these strings could contain
  the end-marker which should not be found inside strings.

 You could build in escaping but that complicates things quite quickly,
 assuming this is for your own private use and you won't be dealing with
 huge rafts of data from elsewhere or using this to control radiotherapy
 machines etc, that's probably overkill.

 The re module should do everything you need and is part of the standard lib.

  import re
  regex = re.compile(r'(.{1,500}?)', re.DOTALL)
  regex.findall(the cat sat on the mat)

 ['sat', 'mat']

 Hope this helps,

 Roger.

Use the parser module.

 parser.expr('func(a+1)')
parser.st object at ...

 parser.expr('print a')
...
SyntaxError: invalid syntax

Quite intensive as you have to compile every initial substring to find
the longest one but at least you use Python's own definition of an
expression.

Chard.
-- 
http://mail.python.org/mailman/listinfo/python-list