[英]Find words that startswith() and endswith() in a DataFrame column
[英]Regex to match all words that startswith and endswith specific characters in string
如何修復我的正則表達式模式以匹配以“X”開頭並以“Z”結尾的每個單詞?
碼:
import re
#input
s = "xaz xazx xaxsza zsxdaszdx zasxz xaaz xaaaz"
pattern1 = "x.*z"
pattern2 = "\bx.*z\b"
pattern3 = "x.*?z"
pattern4 = "\b^x.*z$\b"
pattern5 = "\Bx.*z\B"
#also tried using \s, \S, ^ and $...
re.findall(pattern, s)
期望的輸出:
out = ["xaz", "xaaz", "xaaaz"]
我怎樣才能做到這一點?
關於你的模式的幾個注釋:
"x.*z"
- 匹配x
,然后*除了換行之外的任何字符盡可能多的直到最后一次出現的z
"\\bx.*z\\b"
- 退格符號,然后與上面相同,再次是退格符號 "x.*?z"
- 一個x
,然后*除了換行之外的任何字符盡可能少到第一次出現的z
"\\b^x.*z$\\b"
- 一個退格符號,后跟字符串的開頭,表示已經發出故障信號,任何0 +字符到z
后跟字符串結尾,然后是退格符號 "\\Bx.*z\\B"
- 非字邊界, x
,任何0 +字符,直到最后一個z
后面沒有字邊界。 您需要使用原始字符串文字,以便\\b
可以表示單詞邊界。
所以,你可以使用
s = "xaz xazx xaxsza zsxdaszdx zasxz xaaz xaaaz"
pattern = r"\bx\w*z\b"
print(re.findall(pattern, s))
# => ['xaz', 'xaaz', 'xaaaz']
請參閱Python演示
如果要僅使用字母匹配單詞,請使用r"\\bx[^\\W\\d_]*z\\b"
。
模式演示 :
\\b
- 領先的單詞邊界 x
- 一個x
\\w*
- 0+單詞字符(字母/數字/ _
)( [^\\W\\d_]
_
[^\\W\\d_]
構造將匹配任何字母,數字和_
在“雙重否定”構造中減去) z
a z
\\b
- 尾隨字邊界。 請注意,如果您只使用空格分隔“單詞”,則可以使用
[x for x in s.split() if x.startswith('x') and x.endswith('z')]
正則表達式:\\ bx \\ S + z \\ b
演示: https : //regex101.com/r/XuJybA/2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.