2012-07-23 14 views
5

Linia musi być zatwierdzone przez regex,Regex dopasowania wszystkich, ale nie pusty

  1. linia może zawierać dowolne znaki, spacje, cyfry, pływaki.

  2. linia nie powinna być pusta

Próbowałem to:

[A-Za-z0-9~`!#$%^&*()_+-]+ //thinking of all the characters 

Wszelkie alternatywne rozwiązanie będzie pomocne

+1

Co z '+'.? –

+3

Więc mówisz, że absolutnie wszystko jest dozwolone, o ile linia nie jest pusta? Dlaczego chcesz użyć do tego celu wyrażenia regularnego, w przeciwieństwie do funkcji 'length', którą jestem pewien, że twój język ma? – ruakh

+1

potrzebujesz wyrażeń regularnych? dlaczego po prostu nie przyciąć linii i sprawdzić, czy to nie jest pusty ciąg znaków? –

Odpowiedz

0

try:

[.]+ 

To powinno być dowolny znak acter, przynajmniej jeden.

+6

-1, przepraszam. W większości silników wyrażeń regularnych '[.]' Będzie dopasowywać tylko rzeczywisty okres. Masz na myśli '.'. – ruakh

2

Możesz po prostu sprawdzić, czy linia pasuje do ^$, jeśli jest pusta i możesz jej użyć jako błędu, w przeciwnym razie przełączy się.

6

Spróbuj: [^()]

W Pythonie z re.match():

>>> re.match(r"[^()]", '') 
    >>> re.match(r"[^()]", ' ') 
    <_sre.SRE_Match object at 0x100486168> 
10

Spróbuj dopasować linię, która zawiera więcej niż tylko spacje

/.*\S.*/ 

Oznacza to

/ = ogranicznik
.* = zero lub więcej czegokolwiek, ale nowej linii
\S = cokolwiek oprócz białych znaków (znak nowej linii, tabulacji, spacja)

więc masz
mecz bynajmniej nowej linii + coś nie spacji + bynajmniej nowej linii

, jeśli linia białych spacji nie liczy się jako biała, następnie zastąp regułę wartością /.+/, która będzie pasować do co najmniej jednego elementu.

+0

To jest poprawna odpowiedź! – calbertts

-1

Ten będzie pasował do wszystkiego, ale nie BLANK ciąg:

^(\s|\S)*(\S)+(\s|\S)*$ 

jest pusty ciąg znaków, które zawierają tylko puste (tabs, spacje itp.)

0

Spróbuj tego:

^.+$ 

użyłem tego w Pythonie BeautifulSoup gdy próbuje znaleźć znaczniki, które nie mają atrybutu, który jest pusty. To działało dobrze. Przykład znajduje się poniżej:

# get first 'a' tag in the html content where 'href' attribute is not empty 
parsed_content.find("a", {"href":re.compile("^.+$")}) 
0

Ten będzie pasował do każdej linii z co najmniej 1 znak:

(.*?(\n)) 
Powiązane problemy