我需要解析.xlsx文件中自由文本字段中的特定字符串。我在Spyder中使用Python2.7。
我逃过了“在正则表达式中,但我仍然得到同样的错误。
为此,我使用熊猫将.xslx文件转换为熊猫数据文件:
data = "complaints_data.xlsx"
read_data = pd.read_excel(data)
read_data.dropna(inplace = False)
df = pd.DataFrame(read_data)
df['FMEA Assessment'] = df['FMEA Assessment'].replace({',':''}, regex=True)然后,我使用熊猫的提取函数提取我的字符串字段FMEA,Rev和Line使用正则表达式。
fmea_pattern = r'(FMEA\s*\d*\d*\d*\d*\d*|fmea\s*\d*\d*\d*\d*\d*|DOC\s*\-*[0]\d*\d*\d*\d*\d*|doc\s*\-*[0]\d*\d*\d*\d*\d*)'
df[['FMEA']] = df['FMEA Assessment'].str.extract(fmea_pattern, expand=True)
rev_pattern = r'(Rev\.*\s+\D{1,2}+|rev\.*\s+\D{1,2}|REV\.*\s+\D{1,2}|rev\.*\s+\D{1,2})'
df[['REV']] = df['FMEA Assessment'].str.extract(rev_pattern, expand=True)
line_pattern = r'(line item\.*\s*\:*\d{1,3}\d*\.*\D*\.*\d+\d*?\.|Line\.*\s*\:*\d{1,3}\d*\.*\D*\.*\d+\d*?\.|lines\.*\s*\:*\d{1,3}\d*\.*\D*\.*\d+\d*?\.|Lines\.*\s*\:*\d{1,3}\d*\.*\D*\.*\d+\d*?\.|Line item\.*\s*\:*\d{1,3}\d*\.*\D*\.*\d+\d*?\.|LINES\.*\s*\:*\d{1,3}\d*\.*\D*\.*\d+\d*?\.|LINE\.*\s*\:*\d{1,3}\d*\.*\D*\.*\d+\d*?\.)'
df[['LINE']] = df['FMEA Assessment'].str.extract(line_pattern, expand=True) 我需要解析的字符串字段可以以各种方式输入,我在regex公式中对每一种方式进行了解释,并对一个单词的每一个变体进行了解释;例如,我计算了行、行等。我分别测试了regex公式,它们正在正常工作。但是,当我将它们合并到上面的代码中时,我会得到以下错误消息:

另外,是否有另一种方法可以同时解释同一个单词的变化(小写、大写和标题大写)?
发布于 2019-11-06 18:33:15
本例中的主要错误是由于您使用的是占有式量词,而不是常规的、非占有式量词。
当用户在在线PCRE regex测试器中测试他们的模式时,这是一个常见的错误。您需要确保始终在与目标环境兼容的环境(或regex引擎选项)中测试regex。
re 不支持拥有式量词
{5}+
{5,}+
{5,10}+
++
?+
*+在本例中,您只需从+ \D{1,2}+中移除尾随的即可。
rev_pattern = r'(Rev\.*\s+\D{1,2}|rev\.*\s+\D{1,2}|REV\.*\s+\D{1,2}|rev\.*\s+\D{1,2})'看来你可以用
rev_pattern = r'((?:[Rr]ev|REV)\.*\s+\D{1,2})' # Will only match Rev, REV and rev at the start
rev_pattern = r'(?i)(Rev\.*\s+\D{1,2})' # Will match any case variations of Rev请参阅regex演示 at Regex101,注意左边选择的Python选项。
另外,请注意,通过在模式开始时添加(?i),或者通过使用re.I或re.IGNORECASE参数编译正则表达式,可以使整个模式不区分大小写。这将“解释同一时间同一个单词的变化(小写、大写和标题大写)”。
注意到:如果您实际上是在使用拥有式量词,您可以借助正的前瞻性和反向引用的帮助,模仿所有格量词。但是,在Python中,您需要re.finditer来访问整个匹配值。
https://stackoverflow.com/questions/58734438
复制相似问题