php正则表达式为python,preg_match($ x,$ y,$ z)为re.search(x,y,z)

时间:2016-05-15 17:55:29

标签: php python regex preg-match

先生。 Wiktor,这个问题绝不是你在标记这个副本的理由中并列的问题的重复。 也就是说,你指出的问题询问python中preg_match的countpart是什么。我,甚至在TITLE ITSELF中提到了#34; re.search"这是你提到的主题的答案。我知道re.search 我的问题特别是如何在re.search中使用第三个参数的方式在我提供的示例中使用php中的对应方式。维克托先生,我恭敬地请求你将我的帖子取消标记为重复先谢谢你。

我想要做的是在Python中使用希腊语词干(NLP)。 php代码是这样的:

protected static $step1list = array(
    "φαγια"=>"φα",
    "φαγιου"=>"φα",
    "φαγιων"=>"φα",
    "σκαγια"=>"σκα",
    "σκαγιου"=>"σκα",
    "σκαγιων"=>"σκα",
    "ολογιου"=>"ολο",
    "ολογια"=>"ολο",
    "ολογιων"=>"ολο",
    "σογιου"=>"σο",
    "σογια"=>"σο",
    "σογιων"=>"σο",
    "τατογια"=>"τατο",
    "τατογιου"=>"τατο",
    "τατογιων"=>"τατο",
    "κρεασ"=>"κρε",
    "κρεατοσ"=>"κρε",
    "κρεατα"=>"κρε",
    "κρεατων"=>"κρε",
    "περασ"=>"περ",
    "περατοσ"=>"περ",
    "περατα"=>"περ",
    "περατων"=>"περ",
    "τερασ"=>"τερ",
    "τερατοσ"=>"τερ",
    "τερατα"=>"τερ",
    "τερατων"=>"τερ",
    "φωσ"=>"φω",
    "φωτοσ"=>"φω",
    "φωτα"=>"φω",
    "φωτων"=>"φω",
    "καθεστωσ"=>"καθεστ",
    "καθεστωτοσ"=>"καθεστ",
    "καθεστωτα"=>"καθεστ",
    "καθεστωτων"=>"καθεστ",
    "γεγονοσ"=>"γεγον",
    "γεγονοτοσ"=>"γεγον",
    "γεγονοτα"=>"γεγον",
    "γεγονοτων"=>"γεγον"
);
protected static $step1regexp="/(.*)(φαγια|φαγιου|φαγιων|σκαγια|σκαγιου|σκαγιων|ολογιου|ολογια|ολογιων|σογιου|σογια|σογιων|τατογια|τατογιου|τατογιων|κρεασ|κρεατοσ|κρεατα|κρεατων|περασ|περατοσ|περατα|περατων|τερασ|τερατοσ|τερατα|τερατων|φωσ|φωτοσ|φωτα|φωτων|καθεστωσ|καθεστωτοσ|καθεστωτα|καθεστωτων|γεγονοσ|γεγονοτοσ|γεγονοτα|γεγονοτων)$/u";

$w;
$stem="";
$suffix="";
$firstch="";

if (preg_match($step1regexp, $w, $fp)) {
    $stem = $fp[1];
    $suffix = $fp[2];
    $w = $stem.$step1list[$suffix];
}

我尝试过的最新事情就是这个(我不会对这些名单有所了解,他们和php一样):

import re

step1list = {
    u"φαγια": u"φα",
    blah blah blah blah
    }

stem = ""
suffix=""
firstch=""

s = u"σογια"
reg = re.compile(r'/(.*)(φαγια|φαγιου|φαγιων|σκαγια|σκαγιου|σκαγιων|ολογιου|ολογια|ολογιων|σογιου|σογια|σογιων|τατογια|τατογιου|τατογιων|κρεασ|κρεατοσ|κρεατα|κρεατων|περασ|περατοσ|περατα|περατων|τερασ|τερατοσ|τερατα|τερατων|φωσ|φωτοσ|φωτα|φωτων|καθεστωσ|καθεστωτοσ|καθεστωτα|καθεστωτων|γεγονοσ|γεγονοτοσ|γεγονοτα|γεγονοτων)$');
m = reg.search(s)
if m:
    stem = m.group(1);
    suffix = m.group(2);
    s = "{0}{1}".format(stem, step1list[suffix])
print(s)
print(stem)
print(suffix)

我得到的结果是:

σογια

(后面有2个空白行)表示未成功识别2组:(

我该如何修补?

1 个答案:

答案 0 :(得分:1)

来自docs :(另见match vs search

import re
p = re.compile( regex )
m = p.search( 'string goes here' ) #p.match() to find from start of string only
if m:
    print 'Match found: ', m.group() # group(1...n) for capture groups
else:
    print 'No match'