0

myreg = r"\babcb\"

mystr = "sdf ddabc"

mystr1 = "sdf abc"

print(re.findall(myreg,mystr))=[]

print(re.findall(myreg,mystr1))=[abc]

これまでのところ、すべてが期待どおりに機能しますが、reg と str を変更すると.

myreg = r"\b\+abcb\"

mystr = "sdf +abc"

print(re.findall(myreg,mystr)) = [] but i would like to get [+abc]

次の作業を期待どおりに使用することに気付きました。

   myreg = "^\\+abc$"

   mystr = "+abc"   

   mystr1 = "-+abc"

私の質問: 文字列を分割せずに上記と同じ結果を達成することは可能ですか?

よろしくお願いします、

ガブリエル

4

2 に答える 2

0

2つの問題があります

  1. +inの前+abcには単語境界がないため、\b一致できません。
  2. あなたの正規表現は、 (タイプミス)の後\b\+abcb\にリテラル文字と一致しようとします。babc

単語境界

単語境界\bは、単語文字 (文字、数字、アンダースコア) と非単語文字 (または行頭または行末) の間の位置で一致します。たとえば、the+と the の間に単語境界があります。a

解決策: 自分の境界線を作る

単語文字が前にない場合にのみ一致させたい場合+abc(たとえば、 の中に入れたくない場合def+abc) は、後読みで独自の境界を作成できます。

(?<!\w)\+abc

+abcこれは、「単語の文字 (文字、数字、アンダースコア) が前にない場合に一致する」という意味です。

于 2014-06-13T23:06:30.207 に答える
0

あなたの問題は次のとおりです。

  • \b\w\W文字 (またはその逆)の間の境界として定義されます。
  • \w文字セットを含む[a-zA-Z0-9_]
  • \W[^a-zA-Z0-9_]を除くすべての文字を意味する文字セットを含む[a-zA-Z0-9_]

'+'は含まれ\wていないため、空白と'+'.

\b必要なものを取得するには、パターンから最初のものを削除する必要があります。

import re

string = "sdf +abc"
pattern = r"\+abc\b"
matches = re.findall(pattern, string)

print matches
['+abc']
于 2014-06-13T23:06:41.513 に答える