Output
-
A-BA
This prints:ABA
A-B-BAB
我试图使用regex在一个字符串中做以下事情。ABBAB
-
在两个字母之间,我们必须将其删除。9AHYA7
应是 9-AHYA-7
;和 977AB99T5
应是 977-AB-99-T-5
如果一个字母和一个数字相邻,那么我们必须插入一个连字符。
HS98743YVJUHGF78BF8HH3JHFC83438VUN5498FCNG
7267-VHSBVH8737HHC8C-HYHFWYFHH-7Y84743YR8437G
之间的符号。
例子8T
8-T
re.sub(r'\dab-d', '\d-ab-d', s)
应是
;和在上面的字符串中,同样的原则必须被纳入。
我试着用下面的代码来转换
([A-Z]-(?=[A-Z]))|([A-Z](?=[0-9])|[0-9](?=[A-Z]))
变成
(
可惜不能用。我不知道该怎么做。 [A-Z]-(?=[A-Z])
)
我试图使用regex在一个字符串中做以下工作:如果有一个连字符 - 两个字母之间,我们必须删除它。例如A-BA应该是ABA; A-B-BAB应该是ABBAB 如果一个字母... ...|
你可以使用2个带有lookaround的捕获组,在替换时使用lambda来检查哪个组匹配。(
如果第1组匹配,则删除最后一个字符。如果第2组匹配,则添加一个连字符。解释[A-Z](?=[0-9])
捕捉 |
第1组[0-9](?=[A-Z])
匹配A-Z和-,并断定右边的是A-Z。)
紧密型集团匹配A-Z,并断定右边的东西是数字
import re
pattern = r"([A-Z]-(?=[A-Z]))|([A-Z](?=[0-9])|[0-9](?=[A-Z]))"
strings = [
"A-BA",
"A-B-BAB",
"9AHYA7",
"977AB99T5",
"HS98743YVJUHGF78BF8HH3JHFC83438VUN5498FCNG",
"7267-VHSBVH8737HHC8C-HYHFWYFHH-7Y84743YR8437G"
]
for str in strings:
result = re.sub(
pattern,
lambda x: x.group(1)[:-1] if x.group(1) else x.group(2) + "-",
str
)
print(result)
或
ABA
ABBAB
9-AHYA-7
977-AB-99-T-5
HS-98743-YVJUHGF-78-BF-8-HH-3-JHFC-83438-VUN-5498-FCNG
7267-VHSBVH-8737-HHC-8-CHYHFWYFHH-7-Y-84743-YR-8437-G
匹配0-9,并断定右边的是A-Z。Regex演示re.sub