文字列を検索して、少なくとも n 文字の長さで、「こんにちは」で始まり「さようなら」で終わる一致を返しています。
n = 10
としましょうstr = "himalayashibye"
。
私はやりたい:
stringFinder = re.findall("hi.{n-5}*bye",str)
(n から 5 を差し引いているのは、hi と bye が既に n 文字のうち 5 文字を構成しているためです。)
ただし、これは機能しないようです。
助言がありますか?
文字列を検索して、少なくとも n 文字の長さで、「こんにちは」で始まり「さようなら」で終わる一致を返しています。
n = 10
としましょうstr = "himalayashibye"
。
私はやりたい:
stringFinder = re.findall("hi.{n-5}*bye",str)
(n から 5 を差し引いているのは、hi と bye が既に n 文字のうち 5 文字を構成しているためです。)
ただし、これは機能しないようです。
助言がありますか?
元の質問は「少なくともn文字の長さ」でしたが、私はuser2246674にほとんど同意します。したがって.{5,}
、使用する必要があります。
>>> import re
>>> n = 10
>>> pat = r"hi.{%d,}bye"%(n-5)
>>> pat
'hi.{5,}bye'
>>> s = "himalayashibye"
>>> re.findall(pat, s)
['himalayashibye']
>>>
文字列形式 (上記のコメントで対応) は既に使用されています。それでそれを続けてください、例えば:
"hi.{%d}*bye" % (n - 5)
ただし、これでも正しくない結果が得られることに注意してくださいn = 10
。
"hi.{5}*bye"
これは、.{5}*
「5 ( ) のグループに一致.{5}
」を 0 回以上 (0、5、10、15 など) 意味するため、正しくありません。のように一致しないこれらの境界上にない多くの単語がありますhi1234567bye
。1234567
は 5 群の倍数ではないため一致しません。
代わりに、.{5,}
どれが「少なくとも 5 回一致する」かを検討し、より長い単語のみを受け入れますhi12345bye
。