gpt4 book ai didi

python - 我将如何匹配可能跨越也可能不跨越多行的字符串?

转载 作者:行者123 更新时间:2023-11-28 17:09:08 24 4
gpt4 key购买 nike

我有一个文档,当转换为文本时,会将电话号码分成多行,如下所示:

(xxx)-xxx-
xxxx

由于与我的项目相关的各种原因,我不能简单地加入队列。

如果我知道 phonenumber="(555)-555-5555" 我该如何编译正则表达式以便在我运行它时

(555)-555-
5555

它会匹配吗?

**编辑

为了帮助澄清我的问题,它采用更抽象的形式。

test_string = "xxxx xx x xxxx"
text = """xxxx xx
x
xxxx"""

我需要在文本中找到测试字符串。换行符可以在文本中的任何位置,需要考虑转义的字符。

最佳答案

一个简单的解决方法是在搜索之前替换文档文本中的所有 \n 字符:

pat = re.compile(r'\(\d{3}\)-\d{3}\d{4}')
numbers = pat.findall(text.replace('\n',''))

# ['(555)-555-5555']

如果由于任何原因无法做到这一点,显而易见的答案是在每个搜索字符之间处理一个换行符,虽然不雅观:

pat = re.compile(r'\(\n*5\n*5\n*5\n*\)\n*-\n*5\n*5\n*5\n*-\n*5\n*5\n*5\n*5')

如果你需要处理任何格式,你可以像这样填充格式:

phonenumber = '(555)-555-5555'
pat = re.compile('\n*'.join(['\\'+i if not i.isalnum() else i for i in phonenumber]))

# pat
# re.compile(r'\(\n*5\n*5\n*5\n*\)\n*\-\n*5\n*5\n*5\n*\-\n*5\n*5\n*5\n*5', re.UNICODE)

测试用例:

import random
def rndinsert(s):
i = random.randrange(len(s)-1)
return s[:i] + '\n' + s[i:]

for i in range(10):
print(pat.findall(rndinsert('abc (555)-555-5555 def')))

# ['(555)-555-5555']
# ['(555)-5\n55-5555']
# ['(555)-5\n55-5555']
# ['(555)-555-5555']
# ['(555\n)-555-5555']
# ['(5\n55)-555-5555']
# ['(555)\n-555-5555']
# ['(555)-\n555-5555']
# ['(\n555)-555-5555']
# ['(555)-555-555\n5']

关于python - 我将如何匹配可能跨越也可能不跨越多行的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48909309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com