在python中,正则表达式必须以字母开头,以数字结尾
我正在尝试使用python提取字符串模式:在python中,正则表达式必须以字母开头,以数字结尾,python,regex,Python,Regex,我正在尝试使用python提取字符串模式: 必须以大写字母“C”开头 中间部分可以包含/ 必须以一个或两个数字结尾 示例字符串: 193 skol C/12 334 skol C/6 577 skol C12 345 skol C6 预期的匹配结果将是: C/12 C/6 C12 C6 这就是我的正则表达式的样子: df['a'].str.extract('^[C]\/?\d{1,2}$') 但是,它没有生成预期的结果。我尝试在正则表达式中添加“[]”,但仍然不起作用:(有人能给我一些建
193 skol C/12
334 skol C/6
577 skol C12
345 skol C6
预期的匹配结果将是:
C/12
C/6
C12
C6
这就是我的正则表达式的样子:
df['a'].str.extract('^[C]\/?\d{1,2}$')
但是,它没有生成预期的结果。我尝试在正则表达式中添加“[]”,但仍然不起作用:(有人能给我一些建议吗?非常感谢!试试这个:
\C(\/|)\d{1,2}$
\C
-Catch literal upper C(/\ |)
-捕获文字/
或无(管道simbol,后面没有匹配项)\d{1,2}$
-在结尾处找到一个或两个数字
代码:
您可以使用正则表达式
C\/?\d{1,2}
见
工作原理:
(捕获组#1.将多个令牌分组在一起,并创建一个捕获组,用于提取子字符串或使用反向引用
C字符。匹配一个“C”字符(字符代码67)
/转义字符。匹配“/”字符(字符代码47)
?可选。匹配前面标记的0和1
\d位。匹配任何数字字符(0-9)
+加上。匹配前面的一个或多个标记
)您可以使用:
r'\bC/?\d{1,2}\b'
看起来您也在尝试匹配行首和行尾。但行首位置都不会直接出现在“C”之前。或许可以尝试从你的比赛中删除^and$?@depwl9992谢谢你的建议,它很有效!@QianLi如果你的问题得到了回答,请不要忘记将其中一个答案标记为解决方案。如果你想给depwl9992评分,你可以让他们将他们的评论变成一个答案。为什么反斜杠避开C
,为什么不使用\/?
而不是管道?因为有些匹配需要捕捉反斜杠,或者不捕捉反斜杠,例如C6
C\12
。因此,管道为空的空组将获得反斜杠或无。
C\/?\d{1,2}
import pandas as pd
a = pd.Series(['193 skol C/12','334 skol C/6','577 skol C12','345 skol C6'])
a.str.extract('(C\/?\d+)')
0 C/12
1 C/6
2 C12
3 C6