[英]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.