【问题标题】:Pattern Matching Alphabetical String- Python Regex模式匹配字母字符串 - Python 正则表达式
【发布时间】:2015-02-20 22:11:13
【问题描述】:

我在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”这个词的全部内容?

【问题讨论】:

  • 您可能想改用raw strings
  • 我是?我也必须在其他字符串上使用这种模式,所以我不能直接匹配“Jacobi”这个词,
  • 我不是说你必须使用它,但它可能会使你的 reg ex 更具可读性。另外,请确保您了解其中的区别(查看链接中“7.2.5.8. Raw String Notation”中的示例)。

标签: python regex alphabetical


【解决方案1】:

你需要在你的角色类中使用quantifier

([^\W\d]+)
        ^
        |________ means match the preceding "one or more" times.

虽然这可能会解决问题,但我会使用以下内容仅匹配字母字符。

([a-zA-Z]+)

注意:您的原始字符类匹配字母字符和下划线,因此如果您还需要匹配下划线字符,您只需将其添加到类中即可。

【讨论】:

  • 谢谢,它工作得很好,但是这怎么可能包含空格?
  • 也允许空格添加它。 [a-zA-Z ]+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 2011-11-28
  • 2011-08-29
  • 1970-01-01
  • 2015-11-14
  • 2016-09-01
相关资源
最近更新 更多