1

特定の文型に REM や CEO などの略語があるかどうかを調べようとしています。私が探している略語は、REM やすべて大文字のようにピリオドで区切られた大文字の単語です。

#sentence pattern = 'What is/was a/an(optional) word(abbreviated or not) ?
sentence1 = 'What is a CEO'
sentence2 = 'What is a geisha?'
sentence3 = 'What is ``R.E.M.``?'

これは私が持っているものですが、何も返されません。パターンを認識しません。正規表現の何が問題なのかわかりません。

c5 = re.compile("^[w|W]hat (is|are|was|were|\'s)( a| an| the)*( \`\`)*( [A-Z\.]+\s)*( \'\')* \?$")
if c5.match(question):
    return "True."

編集: 上記の文型に省略語があるかどうかを調べています。

4

4 に答える 4

1

いくつか問題があります。あなたの例からは、どのような種類の引用が予想されるか、または疑問符で終わらないものと一致させたいかどうかは明確ではありません。あなたの正規表現は、 (ゼロまたは以前の1つ)*を使用できると思うときに(ゼロまたは以前の任意の数)を使用します?。代わりにWhat's探しているので、それらが欲しいと思っていても、文を見逃すこともあります。What 's

考えられる解決策は次のとおりです。

 import re
 sentence1 = "What is a CEO"
 sentence2 = "What is a geisha?"
 sentence3 = "What is ``R.E.M.``?"
 sentence4 = "What's SCUBA?"

 c1 = re.compile(r"^[wW]hat(?: is| are| was| were|\'s)(?: a| an| the)? [`']{0,2}((?:[A-Z]\.)+|[A-Z]+)[`']{0,2} ?\??")

 def test(question, regex):
     if regex.match(question):
         return "Matched!"
     else:
         return "Nope!"

 test(sentence1,c1)
 > "Matched!"
 test(sentence2,c1)
 > "Nope!"
 test(sentence3,c1)
 > "Matched!"
 test(sentence4,c1)
 > "Matched!"     

ただし、たとえば、省略形が二重引用符で囲まれていると予想されるかどうかによっては、さらに微調整される可能性があります。

于 2013-07-21T01:56:04.113 に答える