正则表达式 - 在某行中选择两个字符串之间的文本

时间:2014-07-22 14:56:17

标签: regex

我有一些文字:

#: apps/catalogue/abstract_models.py:206
msgid ""
"Universal Product Code (UPC) is an identifier for a product which is not "
"specific to a particular  supplier. Eg an ISBN for a book."
msgstr ""

#: apps/catalogue/abstract_models.py:213
#: templates/oscar/dashboard/catalogue/product_list.html:87
#: templates/oscar/dashboard/catalogue/product_update.html:168
#: templates/oscar/dashboard/catalogue/product_update.html:190
msgid "Parent"
msgstr "والد"

#: apps/catalogue/abstract_models.py:214
msgid ""
"Only choose a parent product if this is a 'variant' of a canonical "
"catalogue.  For example if this is a size 4 of a particular t-shirt.  Leave "
"blank if this is a CANONICAL PRODUCT (ie there is only one version of this "
"product)."
msgstr ""

我希望使用正则表达式在msgid ""msgstr ""之间选择文字。我不想选择翻译msgid

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

<击> 你这样做:

(?s)aaa(.*?)bbb

也就是说,使用您的语言中的s选项或其等效选项,以便.匹配换行符。


如果aaabbb必须在他们自己的行上,您可以这样做:

(?sm)^aaa$(.*?)^bbb$

m选项可让^$在每个开头/结尾匹配。

这是regex101的最后一个案例:http://regex101.com/r/oM7fQ2/1


更新现在问题大不相同......

(?sm)^msgid\s+"(.*?)"\s*\n(.*?)^msgstr\s+"(.*?)"\s*$

这也捕获了引号之间的字符串。

演示:http://regex101.com/r/oM7fQ2/3

答案 1 :(得分:1)

  

我希望使用正则表达式在aaabbb之间选择文字。

这可能会对你有所帮助。从索引1获取匹配的组。

^a{3}\r?\n([\s\S]*?)\r?\n(?=^b{3}\r?\n?)

Live demo

模式说明:

  ^                        the beginning of the string
  a{3}                     'a' (3 times)
  \r?                      '\r' (carriage return) (optional)
  \n                       '\n' (newline)     
  (                        group and capture to \1:
    [\s\S]*?                 any character (0 or more times)(least possible)
  )                        end of \1      
  \r?                      '\r' (carriage return) (optional)
  \n                       '\n' (newline)
  (?=                      look ahead to see if there is:
    ^                        the beginning of the string
    b{3}                     'b' (3 times)
    \r?                      '\r' (carriage return) (optional)
    \n?                      '\n' (newline) (optional)
  )                        end of look-ahead

修改

  

我想在msgid ""msgstr ""之间使用正则表达式选择文字。

根据您的编辑更改,如下面的正则表达式:

^msgid ""\r?\n([\s\S]*?)\r?\n(?=^msgstr ""\r?\n?)

Online demo