RegExp - please help me!
Hi
I use online Python reg exp editor https://pythex.org/ and I use option
"multiline".
I want to use my reg exp in Python script to generate automatically some part
of my program written in C++ (database structure and serialization functions).
In order to do this I need: 1) C++ struct name and 2) struct definition. Struct
definition I need because some inline functions can appear bellow my struct
definition and makes inappropriate further regexp filtering (against variables).
So: I develop regexp which to my mind should work, but it doesn't and I don't
know why. The broken regexp is like this:
struct (.+)\s*{\s*(.+)\s*};
As you can see it has two groups: struct name and struct definition.
It fails even for such simple structure:
struct Structure
{
int mVariable1;
QString mVariable2;
bool mVariable3
};
Please help me with this regexp or tell me that I neeed do this in other way.
thanks, happy Christmas, and happy New Year
Szyk Cech
--
https://mail.python.org/mailman/listinfo/python-list
Re: RegExp - please help me!
Hi,
I can't comment, whether this is the right approach, as I have no
experiences with C++, but for the matching regular expression itself,
I believe, e.g. the following might work for your sample data (I am
not sure, however, what other details or variants should be taken into
account):
(?s)struct (.+?)\s*\{\s*(.+?)\s*\};
i.e. you need to escape the metacharacters { } with a backslash \
and in the current form of the pattern, you also need the flag DOTALL
- set via (?s) in the example above - in order to also match newlines
with . (alternatively, you could use \n specifically in the pattern,
where needed.) it is possible, that an online regex tester uses some
flags implicitly.
I believe, the non-greedy quantifiers are suitable here +?
matching as little as possible, otherwise the pattern would match
between the first and the last structs in the source text at once.
It seems, the multiline flag is not needed here, as there are no
affected metacharacters.
hth,
vbr
=
2017-12-26 14:14 GMT+01:00, [email protected] :
> Hi
> I use online Python reg exp editor https://pythex.org/ and I use option
> "multiline".
> I want to use my reg exp in Python script to generate automatically some
> part of my program written in C++ (database structure and serialization
> functions). In order to do this I need: 1) C++ struct name and 2) struct
> definition. Struct definition I need because some inline functions can
> appear bellow my struct definition and makes inappropriate further regexp
> filtering (against variables).
>
> So: I develop regexp which to my mind should work, but it doesn't and I
> don't know why. The broken regexp is like this:
> struct (.+)\s*{\s*(.+)\s*};
> As you can see it has two groups: struct name and struct definition.
> It fails even for such simple structure:
> struct Structure
> {
> int mVariable1;
> QString mVariable2;
> bool mVariable3
> };
>
> Please help me with this regexp or tell me that I neeed do this in other
> way.
>
> thanks, happy Christmas, and happy New Year
> Szyk Cech
> --
> https://mail.python.org/mailman/listinfo/python-list
>
--
https://mail.python.org/mailman/listinfo/python-list
Re: RegExp - please help me!
On Tue, 26 Dec 2017 05:14:55 -0800 (PST), [email protected] wrote: [snip] > So: I develop regexp which to my mind should work, but it doesn't and > I don't know why. The broken regexp is like this: > struct (.+)\s*{\s*(.+)\s*}; [snip] You'll probably get better help faster if you can present your problem as a couple lines of code, and ask "Why does this print XXX, when I'm expecting it to print YYY?" (Sorry I'm not smart enough to give you an answer to your actual question.) -- To email me, substitute nowhere->runbox, invalid->com. -- https://mail.python.org/mailman/listinfo/python-list
Re: RegExp - please help me! (Posting On Python-List Prohibited)
W dniu wtorek, 26 grudnia 2017 21:53:14 UTC+1 użytkownik Lawrence D’Oliveiro napisał: > On Wednesday, December 27, 2017 at 2:15:21 AM UTC+13, [email protected] wrote: > > struct (.+)\s*{\s*(.+)\s*}; > > You realize that “.” matches anything? Whereas I think you want to match > non-whitespace in those places. I realize that. I want skip white-spaces from the beginning and from the end and match entire body of C++ struct declaration (with white spaces inside as well). Maybe should I use "".strip(" ").strip("\t").strip("\n") function after matching? -- https://mail.python.org/mailman/listinfo/python-list
