2024-10-05 21:56:27 发布
网友
我必须在字符串中搜索以数字作为前缀或后缀的单词(例如,“abc21”或“943xyz”)。然后,我需要把数字和单词分开。你知道吗
例如, “abc12”必须转换为“abc12” 或者“12abc”必须转换为“12abc”
例如,如果数字在字母之间,那么“它应该在字母之间”。我们怎么能做到这一点?有比regex更简单的方法吗?你知道吗
像这样简单的东西。 我们只需要用这些(?<! [\da-z] ) .. (?! [\da-z] )来保护边界 它有两个功能: -它会阻止引擎在同类(数字或字母)之间进行匹配。 -确保没有书尾类型。你知道吗
(?<! [\da-z] ) .. (?! [\da-z] )
方式1:
查找(?<![\da-z])(?:([a-z]+)(\d+)|(\d+)([a-z]+))(?![\da-z]) 替换$1$3 $2$4
(?<![\da-z])(?:([a-z]+)(\d+)|(\d+)([a-z]+))(?![\da-z])
$1$3 $2$4
https://regex101.com/r/k4gNoE/1
(?<! [\da-z] ) (?: ( [a-z]+ ) # (1) ( \d+ ) # (2) | ( \d+ ) # (3) ( [a-z]+ ) # (4) ) (?! [\da-z] )
方式2:
查找(?<![\da-z])(?:([a-z]+(?=\d)|\d+(?=[a-z]))((?<=\d)[a-z]+|(?<=[a-z])\d+))(?![\da-z]) 替换$1 $2
(?<![\da-z])(?:([a-z]+(?=\d)|\d+(?=[a-z]))((?<=\d)[a-z]+|(?<=[a-z])\d+))(?![\da-z])
$1 $2
https://regex101.com/r/LbWnkg/1
(?<! [\da-z] ) (?: ( # (1 start) [a-z]+ (?= \d ) | \d+ (?= [a-z] ) ) # (1 end) ( # (2 start) (?<= \d ) [a-z]+ | (?<= [a-z] ) \d+ ) # (2 end) ) (?! [\da-z] )
可以使用^{}插入该空格:
re.sub(r'\b(?:(\D+)(\d+)|(\d+)(\D+))\b', r"\1\3 \2\4", word)
这与数字后跟非数字匹配,反之亦然。你知道吗
\b边界确保单词的整体匹配,这样我们就不会匹配单词中间的数字。你知道吗
\b
替换模式\1\3 \2\4利用了不匹配的组被空字符串替换的事实。我们知道第1组和第2组或第3组和第4组将匹配,其他组将为空,因此\1\3 \2\4将始终生成有效的结果(不复制输入的任何部分)。你知道吗
\1\3 \2\4
示例:
>>> re.sub(r'\b(?:(\D+)(\d+)|(\d+)(\D+))\b', r"\1\3 \2\4", "abc12") 'abc 12' >>> re.sub(r'\b(?:(\D+)(\d+)|(\d+)(\D+))\b', r"\1\3 \2\4", "12abc") '12 abc' >>> re.sub(r'\b(?:(\D+)(\d+)|(\d+)(\D+))\b', r"\1\3 \2\4", "a12bc") 'a12bc'
你可以试试这个:
def split_vals(s): return ' '.join(re.findall('^\d+|\d+$|^[a-zA-Z]\d+[a-zA-Z]+$|^[a-zA-Z]+$|[a-zA-Z]+', s)) s = ["abc21", "943xyz", '12abc', "a12bc"] new_s = list(map(split_vals, s))
输出:
['abc 21', '943 xyz', '12 abc', 'a12bc']
像这样简单的东西。
我们只需要用这些
(?<! [\da-z] ) .. (?! [\da-z] )
来保护边界 它有两个功能:
-它会阻止引擎在同类(数字或字母)之间进行匹配。
-确保没有书尾类型。你知道吗
方式1:
查找
(?<![\da-z])(?:([a-z]+)(\d+)|(\d+)([a-z]+))(?![\da-z])
替换
$1$3 $2$4
https://regex101.com/r/k4gNoE/1
方式2:
查找
(?<![\da-z])(?:([a-z]+(?=\d)|\d+(?=[a-z]))((?<=\d)[a-z]+|(?<=[a-z])\d+))(?![\da-z])
替换$1 $2
https://regex101.com/r/LbWnkg/1
可以使用^{} 插入该空格:
这与数字后跟非数字匹配,反之亦然。你知道吗
\b
边界确保单词的整体匹配,这样我们就不会匹配单词中间的数字。你知道吗替换模式
\1\3 \2\4
利用了不匹配的组被空字符串替换的事实。我们知道第1组和第2组或第3组和第4组将匹配,其他组将为空,因此\1\3 \2\4
将始终生成有效的结果(不复制输入的任何部分)。你知道吗示例:
你可以试试这个:
输出:
相关问题 更多 >
编程相关推荐