繁体   English   中英

正则表达式以匹配重复的字符集

[英]Regex to match repeated set of characters

我希望能够从自由文本中提取以下模式。

VBAV/123456.01
VBAV/132453.02
VSAV/132452.01.03
VMAV/142143.01.02

目前我正在尝试如下,但没有太大的成功

df["Project Id"] = df["WBS element"].str.cat(
df["Network VxAV"]).str.cat(
df["Text"]).str.cat(
df["Assignment"]).str.cat(
df["Reference"]).str.extract(
"(V[BSM]AV\/[\d]{6}[.0-30-3]{0,2})", expand=True)

对我而言,具有挑战性的部分是提取结尾处重复.01或.02或.03的模式。 这部分可以重复0到2次,因此我尝试使用正则表达式使用{0,2}。

什么是正确的正则表达式呢?

为什么不:

V[BSM]AV/[\d.]+

参见regex101.com上的演示

r'V[BSM]AV/\d{6}(?:\.\d\d){0,2}(?!\d)'

精确匹配6位数字和.## 0-2实例。 (?:xxxx)是非捕获组。 后面不能跟其他数字,因此将不匹配:

VBAV\1234567
VBAV\122346.123

您可能需要调整无法遵循的条件。

考虑的pd.Series s

s = pd.concat([pd.Series(txt.split('\n')) for _ in range(3)], ignore_index=True)

选项1
我的喜好

s.str.split('/', expand=True)

在此处输入图片说明

选项2
还不错

s.str.extract(r'(?P<first>\w+)/(?P<second>.*)', expand=True)

在此处输入图片说明

选项3
非常明确

cols = ['first', 'second']
s.str.extract(r'(?P<first>V[BSM]AV)/(?P<second>\d{6}(.\d{2})+)', expand=True)[cols]

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM