XXXXX_XXXXXまたはXXXXXX_XXXXXまたはXXXXXXの形式の文字列を (Xは英数字)で検索しています。正規表現を使用して行内の文字列を検索します
"_"の前の文字列は5文字または6文字で、 "_"の後の文字列は常に5文字か、まったく6文字で、アンダースコアなしにすることができます。私はPythonでコーディングしています。
ご協力いただければ幸いです。
XXXXX_XXXXXまたはXXXXXX_XXXXXまたはXXXXXXの形式の文字列を (Xは英数字)で検索しています。正規表現を使用して行内の文字列を検索します
"_"の前の文字列は5文字または6文字で、 "_"の後の文字列は常に5文字か、まったく6文字で、アンダースコアなしにすることができます。私はPythonでコーディングしています。
ご協力いただければ幸いです。
これはどのようですか?
([a-zA-Z0-9]{5,6}_[a-zA-Z0-9]{5})|[a-zA-Z0-9]{6}
完全なコード例:
import re
pat = re.compile(r'^(([a-zA-Z0-9]{5,6}_[a-zA-Z0-9]{5})|[a-zA-Z0-9]{6})$')
print pat.match('xxxxx_xxxxx') is not None # True, 5 chars, underscore, 5 chars
print pat.match('xxxxxx_xxxxx') is not None # True, 6 chars, underscore, 5 chars
print pat.match('xxxxxx') is not None # True, 6 chars
注:は、私が以前にこれを書いた、POSIX文字クラスをサポートしていないのpythonを実現していない
([[:alnum:]]{5,6}_[[:alnum:]]{5})|[[:alnum:]]{6}
import re
regex = re.compile("[[:alnum:]]{5,6}_[[:alnum:]]{5})|[[:alnum:]]{6}")
here = re.search(regex, "your string")
if here:
#pattern has been found
輸入re 次に:
re.match("[a-zA-Z0-9]{5,6}(_[a-zA-Z0-9]{5})?", c).group()
事前定義された\ wは "_"を英数字にしているので、ここでは使用できません。
Pythonが開始および終了境界条件をデフォルトとして仮定していない場合、
、または文字列内の文字列を検索する場合、境界条件を考慮する必要があります。
それ以外の場合は、XXXXXXXXXXXXXXXXXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXも一致します。
/ (?:^| [\W_]) # beginning of line or non-alphameric
(?:
[^\W_]{5,6}_[^\W_]{5} # 5-6 alphameric's, underscore, 5 alphameric's
| [^\W_]{6} # or, 6 alphameric's
)
(?: [\W_] | $) # non-alphameric or end of line
/
私はかなりのMichałŠrajerの答えのような、しかし、指摘されているとして、彼のバージョンも(私たちは望んでいない)だけで5 alnum文字に一致します。ここで
はその補償するために彼のバージョンの編集です:re.match("[a-zA-Z0-9]{5}(([a-zA-Z0-9]?_[a-zA-Z0-9]{5})?|[a-zA-Z0-9])", c)
他の回答の一部は、おそらくより読みやすいですけど...
この6つの文字にマッチします、、、6つの文字を強調しています(私の質問から読んで) – jwd
@jwd:いいえ、これは "XXXXXX"と同様に一致しません。 ()に注意してください。 –
はい、「XXXXXX」と一致することに同意します。「XXXXXX_XXXXXX」と一致すると言っていますが、これは間違っています(afaict)。 – jwd