[英]Extract words based on regex
我试图提取出现在单词 SUITE、suite、ste、Ste 之后的任何内容。 或熊猫数据框列中的字符 # 。 例子如下
4230 Harding Pike Ste 435
4230 Harding Pike Suite 435
4230 Harding Pike SUITE A
4230 Harding Pike Ste. 101
4230 Harding Pike SUITE B-200
4230 Harding Pike #900
4230 Harding Pike STE 503
4230 Harding Pike SUITE 300
4230 Harding Pike Ste 700
4230 Harding Pike SUITE #2
结果:
SuiteNos
435
435
A
101
B-200
900
503
300
700
2
我尝试使用以下正则表达式,但它没有按预期工作 -
df_merged['address'].str.extract(r'\**\**suite.*\**\**')
df_merged['address'] = re.findall('@([suite]+)', df_merged['address'])
使用不区分大小写的匹配,您可以使用带有交替的捕获组:
(?i)(?:#|Suite|ste\.?)\s*([^\s#].*)
模式匹配:
(?:
非捕获组
Suite
匹配字面意思|
或者ste\\.?
将 ste 与可选点匹配|
或者#
逐字匹配)
关闭非捕获组\\s*
匹配可选的空白字符([^\\s#].*)
捕获组 1,从匹配不带 # 的非空白字符开始,以及该行的其余部分strings = [
"4230 Harding Pike Ste 435",
"4230 Harding Pike Suite 435",
"4230 Harding Pike SUITE A",
"4230 Harding Pike Ste. 101",
"4230 Harding Pike SUITE B-200",
"4230 Harding Pike #900",
"4230 Harding Pike STE 503",
"4230 Harding Pike SUITE 300",
"4230 Harding Pike Ste 700",
"4230 Harding Pike SUITE #2"
]
pattern = r"(?i)(?:#|Suite|ste\.?)\s*([^\s#].*)"
df_merged = pd.DataFrame(strings, columns = ['address'])
df_merged['SuiteNos'] = df_merged['address'].str.extract(pattern)
print(df_merged)
输出
0 435
1 435
2 A
3 101
4 B-200
5 900
6 503
7 300
8 700
9 2
使用您显示的示例,请尝试以下正则表达式。
[Ss](?:[uU][iI])?[tT][eE](?:[.])?\s+#?(\S+)
在Pandas 中运行以下代码:
df['value'].str.extract(r'[Ss](?:[uU][iI])?[tT][eE](?:[.])?\s+#?(\S+)')
Pandas 中的上述代码和 OP 提供的示例的输出如下:
0 435
1 435
2 A
3 101
4 B-200
5 NaN
6 503
7 300
8 700
9 2
Name: value, dtype: object
说明:为以上添加详细说明。
[Ss] ##Matching small OR capital S here.
(?:[uU][iI])? ##In a non-capturing group matching u/U i/I and keep this optional.
[tT][eE] ##Matching t or T followed by e or E here.
(?:[.])? ##In a non-capturing group matching . and keeping it optional.
\s+#? ##Matching 1 or more occurrences of space here followed by # and keeping it optional match here.
(\S+) ##Creating 1st and only capturing group to catch everything non-space here.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.