我有这段代码,用来用Python语言解析街道和门牌号

import re 

def parse_street(address):
    pattern = r'^(.*?)(?i)\b no\b'
    match = re.match(pattern, address)
    if match:
        return match.group(1).strip()
    else:
        return None


def parse_housenumber(address):
    pattern = r'(?i)\bno\.?\s*([\dA-Z]+)'
    match = re.search(pattern, address)
    print(match)
    if match:
        return match.group(1)
    else:
        return None

df['street'] = df['address'].apply(lambda x: pd.Series(parse_street(x)))
df['house_number'] = df['address'].apply(lambda x: pd.Series(parse_housenumber(x)))

为什么我在PostgreSQL中使用相同的regex语法查询运行查询时出错:

SELECT (regexp_matches('Jl. ABC No.01', '^(.*?)(?i)\b no\b'))[1]

错误消息为: ERROR: invalid regular expression: quantifier operand invalid

PYTHON中的regex与其他系统中的regex有什么不同?如何将我的python函数转换为PostgreSQL语法?我想在同一个表中的"Address"列中添加"Street"和"house_number"列

推荐答案

Yes, most regex engines' syntax is different, to a lesser or greater degree. This is why the tag requires another tag specifying the engine, tool or a programming language to which the regex question pertains.

PostgreSQL docs(强调我的):

ARE可以beginembedded options:序列(?xyz)(其中xyz是一个或多个字母字符)指定影响RE其余部分的选项.这些选项覆盖任何先前确定的选项-特别是,它们可以覆盖regex运算符或regex函数的flags参数所暗示的大小写敏感行为.可用的选项字母如表9.24所示.请注意,这些相同的选项字母用于正则表达式函数的flags个参数中.

因此,这个正则表达式在PostgreSQL中是不合法的:

^(.*?)(?i)\b no\b

但是,这一条是:

(?i)^(.*?)\b no\b

然而,虽然合法,但它的意思仍然不同于Python1,因为\b的含义是不同的:对于Python,它是一个词边界断言;对于PostgreSQL,它是一个退格符.单词边界断言是\y,您还可以更精确地使用\m\M(分别是单词开始和结束断言).因此,等效的PostgreSQL正则表达式为:

(?i)^(.*?)\y no\y

Python相关问答推荐

在Python中对分层父/子列表进行排序

如何使用symy打印方程?

numba jitClass,记录类型为字符串

需要计算60,000个坐标之间的距离

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

如何在图中标记平均点?

如何在FastAPI中为我上传的json文件提供索引ID?

CommandeError:模块numba没有属性generated_jit''''

使用Python和文件进行模糊输出

使用特定值作为引用替换数据框行上的值

使用Openpyxl从Excel中的折线图更改图表样式

并行编程:同步进程

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

如何使用正则表达式修改toml文件中指定字段中的参数值

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

将链中的矩阵乘法应用于多组值

如何获得3D点的平移和旋转,给定的点已经旋转?

numpy数组和数组标量之间的不同行为

如何在Python中从html页面中提取html链接?

运行从Airflow包导入的python文件,需要airflow实例?