模式匹配字母字符串 - Python 正则表达式
Pattern Matching Alphabetical String- Python Regex
我在python中的正则表达式如下:
r'(?s)(\thinhline\n\\\[-16pt]\n)([^\W\d])(.*?)(\n *\\)'
我的测试字符串:
\thinhline
\[-16pt]
Jacobi
& $\JacobiP{\alpha}{\beta}{n}@{x}$
& $(-1,1)$
& $(1 - x)^{\alpha} (1 + x)^{\beta}$
& $\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, &\text{$n = 0$} \end{cases}$
$\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, & \text{$n = 0$}\end{cases}$
& $\dfrac{\pochhammer{n+\alpha+\beta+1}{n}}{2^n n!}$
& $\dfrac{n (\alpha-\beta)}{2n+\alpha+\beta}$
& $\alpha,\beta > -1$
\
匹配捕获:
Match 1
1. \thinhline \[-16pt]
2. J
3. acobi & $\JacobiP{\alpha}{\beta}{n}@{x}$ & $(-1,1)$ & $(1 - x)^{\alpha} (1 + x)^{\beta}$ & $\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, &\text{$n = 0$} \end{cases}$ $\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, & \text{$n = 0$}\end{cases}$ & $\dfrac{\pochhammer{n+\alpha+\beta+1}{n}}{2^n n!}$ & $\dfrac{n (\alpha-\beta)}{2n+\alpha+\beta}$ & $\alpha,\beta > -1$
4. \
为什么第 2 组只得到 "J" 的第一个字符?如何让第 2 组获得整个单词 "Jacobi"?
您需要对您的角色使用 quantifier class。
([^\W\d]+)
^
|________ means match the preceding "one or more" times.
虽然这可能会解决问题,但我会使用以下内容来仅匹配字母字符。
([a-zA-Z]+)
注意:你的原始字符class匹配字母字符和下划线,所以如果你需要匹配下划线字符,你可以简单地将它添加到class。
我在python中的正则表达式如下:
r'(?s)(\thinhline\n\\\[-16pt]\n)([^\W\d])(.*?)(\n *\\)'
我的测试字符串:
\thinhline
\[-16pt]
Jacobi
& $\JacobiP{\alpha}{\beta}{n}@{x}$
& $(-1,1)$
& $(1 - x)^{\alpha} (1 + x)^{\beta}$
& $\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, &\text{$n = 0$} \end{cases}$
$\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, & \text{$n = 0$}\end{cases}$
& $\dfrac{\pochhammer{n+\alpha+\beta+1}{n}}{2^n n!}$
& $\dfrac{n (\alpha-\beta)}{2n+\alpha+\beta}$
& $\alpha,\beta > -1$
\
匹配捕获:
Match 1
1. \thinhline \[-16pt]
2. J
3. acobi & $\JacobiP{\alpha}{\beta}{n}@{x}$ & $(-1,1)$ & $(1 - x)^{\alpha} (1 + x)^{\beta}$ & $\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, &\text{$n = 0$} \end{cases}$ $\begin{cases} \ifrac{2^{\alpha+\beta+1}\EulerGamma@{\alpha+1}\EulerGamma@{\beta+1}}{\EulerGamma@{\alpha+\beta+2}}, & \text{$n = 0$}\end{cases}$ & $\dfrac{\pochhammer{n+\alpha+\beta+1}{n}}{2^n n!}$ & $\dfrac{n (\alpha-\beta)}{2n+\alpha+\beta}$ & $\alpha,\beta > -1$
4. \
为什么第 2 组只得到 "J" 的第一个字符?如何让第 2 组获得整个单词 "Jacobi"?
您需要对您的角色使用 quantifier class。
([^\W\d]+)
^
|________ means match the preceding "one or more" times.
虽然这可能会解决问题,但我会使用以下内容来仅匹配字母字符。
([a-zA-Z]+)
注意:你的原始字符class匹配字母字符和下划线,所以如果你需要匹配下划线字符,你可以简单地将它添加到class。