使用字节正则表达式的字符类,用于使用多个位块编码的字符

任何

我想在我知道编码(utf-8)的python中对字节串使用正则表达式。我在尝试使用包含使用多个位块编码的字符的字符类时遇到了困难。它们似乎变成了两个或多个在字符类中分别匹配的“字符”。

而是可以对(unicode)字符串执行搜索,但是我想知道是否存在一种针对字节字符串的情况定义字符类的解决方案。也许只是不可能!?

以下是一个python 3示例,显示了当我尝试用替换不同的换行符时发生的情况'\n'

import re

def show_pattern(pattern):
    print(f"\nPattern repr:\t{repr(pattern)}")

def test_sub(pattern, replacement, text):
    print(f"Before repr:\t{repr(text)}")
    result = re.sub(pattern, replacement, text)
    print(f"After repr:\t{repr(result)}")

# Pattern for line breaks
PATTERN = '[' + "\u000A\u000B\u000C\u000D\u0085\u2028\u2029" + ']'
REPLACEMENT = '\n'
TEXT = "How should I replace my unicode string\u2028using utf-8-encoded bytes?"

show_pattern(PATTERN)
test_sub(PATTERN, REPLACEMENT, TEXT)
# expected output:
# Pattern repr: '[\n\x0b\x0c\r\x85\u2028\u2029]'
# Before repr:  'How should I replace my unicode string\u2028using utf-8-encoded bytes?'
# After repr:   'How should I replace my unicode string\nusing utf-8-encoded bytes?'

ENCODED_PATTERN = PATTERN.encode('utf-8')
ENCODED_REPLACEMENT = REPLACEMENT.encode('utf-8')
ENCODED_TEXT = TEXT.encode('utf-8')

show_pattern(ENCODED_PATTERN)
test_sub(ENCODED_PATTERN, ENCODED_REPLACEMENT, ENCODED_TEXT)
# expected output:
# Pattern repr: b'[\n\x0b\x0c\r\xc2\x85\xe2\x80\xa8\xe2\x80\xa9]'
# Before repr:  b'How should I replace my unicode string\xe2\x80\xa8using utf-8-encoded bytes?'
# After repr:   b'How should I replace my unicode string\n\n\nusing utf-8-encoded bytes?'

在编码版本中,我最终得到三个'\n'而不是一个。类似的事情发生在更复杂的文档上,而正确的输出应该是什么也不明显。

维克多·史翠比维

您可能要使用基于交替的模式而不是字符类,因为您要匹配字节序列

PATTERN = "|".join(['\u000A','\u000B','\u000C','\u000D','\u0085','\u2028','\u2029'])

请参阅在线演示

如果您想从字符串初始化模式,请使用

CHARS = "\u000A\u000B\u000C\u000D\u0085\u2028\u2029"
PATTERN = "|".join(CHARS)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式-避免在表达式中使用字符串

字符串使用正则表达式替换正则表达式字符类

用字符串进行正则表达式还是不使用字符串进行正则表达式?

如何使用字符串从正则表达式捕获所有实例

使用字符串中的正则表达式获取特定范围

基于Java的正则表达式,允许使用字母数字字符和',以及

使用字典替换字符串-正则表达式

Python正则表达式使用字符'^'查看奇怪的行为

Django URL在正则表达式中使用字符串

Pyspark:使用字符串格式通过正则表达式过滤数据帧?

使用正则表达式用字符串替换单词

正则表达式仅允许使用字母,连字符,撇号和句点

正则表达式至少3个已使用字符

SQL 服务器中的正则表达式,使用字符的位置

如何使用正则表达式在字符串中强制使用字符/特殊字符

如何使用正则表达式或不使用字符串中的正则表达式在空格后获取 2 个字符

正则表达式用于使用可选分隔符(字符)拆分字符串

使用正则表达式删除R中的特定多字节字符

如何使用正则表达式提前查找并匹配先前的字符串/字符类

使用正则表达式获取多个可能字符串的子字符串

使用正则表达式查找不包含字符串的文本块

如何使用python正则表达式检索字符串数据块

使用正则表达式突出显示字符串块

使用正则表达式允许使用字母字符,连字符,下划线,空格和数字

如何使用正则表达式在字符串中找到美国邮政编码?

通过正则表达式模式匹配使用字符串构建器替换字符串的多个出现

使用正则表达式在多个文件中计算多个字符串

使用python使用正则表达式在多个变量字段中拆分字符串

正则表达式,用于使用某些条件验证字符串字段